当使用相同的代码时,只需更改编译器(从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++,它都会更改Valgrind基准测试的结果.但是,这些值在编译器之间保持一致.程序的运行时分配(峰值)如下:
- GCC(C):1032字节(1KB)
- G++(C++):73744字节(~74KB)
- Clang(C):1032字节(1KB)
- Clang++(C++):73744字节(~74KB)
对于编译,我使用以下命令:
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,我在每个编译器和语言上运行valgrind --tool=massif --massif-out-file=m_compiler_lang ./compiler-lang
次,然后运行ms_print
次以显示峰值.
我做错什么了吗?