Aynı kodu kullanırken, derleyiciyi (C derleyicisinden C ++ derleyicisine) değiştirmek, ne kadar bellek ayrılacağını değiştirir. Bunun neden olduğundan emin değilim ve daha fazla anlamak istiyorum. Şimdiye kadar aldığım en iyi yanıt "muhtemelen I / O akışları", bu çok açıklayıcı değil ve bana C ++ "kullanmadığınız için ödeme yapmaz" yönü hakkında merak ediyor.
Sırasıyla 7.0.1-8 ve 8.3.0-6 sürümleri olan Clang ve GCC derleyicilerini kullanıyorum. Sistemim en son Debian 10 (Buster) üzerinde çalışıyor. Kıyaslamalar Valgrind Massif aracılığıyla yapılır.
#include <stdio.h>
int main() {
printf("Hello, world!\n");
return 0;
}
Kullanılan kod değişmez, ancak C ya da C ++ olarak derlesem Valgrind karşılaştırmasının sonuçlarını değiştirir. Ancak değerler derleyiciler arasında tutarlı kalır. Program için çalışma zamanı ayırmaları (tepe noktası) aşağıdaki gibidir:
- GCC (C): 1.032 bayt (1 KB)
- G ++ (C ++): 73,744 bayt, (~ 74 KB)
- Clang (C): 1.032 bayt (1 KB)
- Clang ++ (C ++): 73,744 bayt (~ 74 KB)
Derleme için aşağıdaki komutları kullanıyorum:
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
Valgrind için, valgrind --tool=massif --massif-out-file=m_compiler_lang ./compiler-langher derleyici ve dilde, sonra ms_printzirveleri görüntülemek için çalışıyorum.
Burada yanlış bir şey mi yapıyorum?
try, belki de bir atlama tablosu veya başka bir şeyle, daha büyük bir bellek ayak izi pahasına bir bloğa girmenin performansının olmadığı bir istisna modeline sahip olmalıdır . İstisnasız derlemeyi deneyin ve bunun nasıl bir etkisi olduğunu görün. Düzenleme: Aslında, iteratif olarak bellek ayak izi üzerinde ne etkisi görmek için çeşitli c ++ özellikleri devre dışı bırakmayı deneyin.
clang++ -xcBunun yerine derlerken clang, aynı tahsisat oradaydı, bu da bağlantılı kütüphaneler nedeniyle olduğunu şiddetle tavsiye ediyor
Cmodda tam olarak aynı sayıda bayt ve aynı sayıda bayt C++modunda oluşturduğundan şüpheleniyorum . Bir transkripsiyon hatası mı yaptınız?