When using the same code, simply changing the compiler (from a C compiler to a C++ compiler) will change how much memory is allocated. I'm not quite sure why this is and would like to understand it more. So far the best response I've gotten is "probably the I/O streams", which isn't very descriptive and makes me wonder about the "you don't pay for what you don't use" aspect of C++.
I'm using the Clang and GCC compilers, versions 7.0.1-8 and 8.3.0-6 respectively. My system is running on Debian 10 (Buster), latest. The benchmarks are done via Valgrind Massif.
#include <stdio.h>
int main() {
printf("Hello, world!\n");
return 0;
}
The code used does not change, but whether I compile as C or as C++, it changes the results of the Valgrind benchmark. The values remain consistent across compilers, however. The runtime allocations (peak) for the program go as follows:
- GCC (C): 1,032 bytes (1 KB)
- G++ (C++): 73,744 bytes, (~74 KB)
- Clang (C): 1,032 bytes (1 KB)
- Clang++ (C++): 73,744 bytes (~74 KB)
For compiling, I use the following commands:
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
For Valgrind, I run valgrind --tool=massif --massif-out-file=m_compiler_lang ./compiler-lang
on each compiler and language, then ms_print
for displaying the peaks.
Am I doing something wrong here?