最佳答案
当使用相同的代码时,简单地改变编译器(从 C 编译器改为 C + + 编译器)将改变分配的内存量。我不太确定这是为什么,也不想更多地理解它。到目前为止,我得到的最好的回答是“可能是 I/O 流”,这并不是很具有描述性,让我对 C + + 的“你不为你不使用的东西付费”这一方面感到好奇。
我使用的是 Clang 和 GCC 编译器,分别是7.0.1-8和8.3.0-6版本。我的系统运行在 Debian 10(Buster)上,最新版本。基准测试是通过 Valgrind Massif 完成的。
#include <stdio.h>
int main() {
printf("Hello, world!\n");
return 0;
}
所使用的代码不会改变,但是不管我是以 C 还是 C + + 的形式编译,它都会改变 Val哪个基准测试的结果。但是,这些值在不同编译器之间保持一致。程序的运行时分配(峰值)如下:
对于编译,我使用以下命令:
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 --tool=massif --massif-out-file=m_compiler_lang ./compiler-lang
,然后运行 ms_print
来显示峰值。
我做错什么了吗?