Saat menggunakan kode yang sama, mengubah kompiler (dari kompilator C ke kompilator C ++) akan mengubah berapa banyak memori yang dialokasikan. Saya tidak begitu yakin mengapa ini terjadi dan ingin lebih memahaminya. Sejauh ini tanggapan terbaik yang saya dapatkan adalah "mungkin aliran I / O", yang tidak terlalu deskriptif dan membuat saya bertanya-tanya tentang aspek "Anda tidak membayar untuk apa yang tidak Anda gunakan" dari C ++.
Saya menggunakan kompiler Clang dan GCC, masing-masing versi 7.0.1-8 dan 8.3.0-6. Sistem saya berjalan di Debian 10 (Buster), terbaru. Tolok ukur dilakukan melalui Valgrind Massif.
#include <stdio.h>
int main() {
printf("Hello, world!\n");
return 0;
}
Kode yang digunakan tidak berubah, tetapi apakah saya mengkompilasi sebagai C atau sebagai C ++, itu mengubah hasil benchmark Valgrind. Namun, nilainya tetap konsisten di seluruh penyusun. Alokasi runtime (puncak) untuk program berjalan sebagai berikut:
- GCC (C): 1.032 byte (1 KB)
- G ++ (C ++): 73.744 byte, (~ 74 KB)
- Dentang (C): 1.032 byte (1 KB)
- Clang ++ (C ++): 73.744 byte (~ 74 KB)
Untuk kompilasi, saya menggunakan perintah berikut:
clang -O3 -o c-clang ./main.c
gcc -O3 -o c-gcc ./main.c
clang++ -O3 -o cpp-clang ./main.cpp
g++ -O3 -o cpp-gcc ./main.cpp
Untuk Valgrind, saya menjalankan valgrind --tool=massif --massif-out-file=m_compiler_lang ./compiler-lang
setiap compiler dan bahasa, lalu ms_print
untuk menampilkan puncaknya.
Apakah saya melakukan sesuatu yang salah di sini?