При использовании того же кода простое изменение компилятора (с компилятора C на компилятор C++) изменит объем выделенной памяти. Я не совсем уверен, почему это так и хотел бы понять это больше. Пока что лучший ответ, который я получил, это "вероятно, потоки ввода/вывода", который не очень описательный и заставляет меня задуматься о аспекте "вы не платите за то, что вы не используете" C++,
Я использую компиляторы Clang и GCC, версии 7.0.1-8 и 8.3.0-6 соответственно. Моя система работает на Debian 10 (Buster), последняя версия. Тесты выполняются через массив Valgrind.
#include <stdio.h>
int main() {
printf("Hello, world!\n");
return 0;
}
Используемый код не изменяется, но, независимо от того, скомпилирован ли я как C или как C++, он изменяет результаты теста Valgrind. Однако значения остаются неизменными для разных компиляторов. Распределение времени выполнения (пик) для программы происходит следующим образом:
- GCC (C): 1032 байта (1 КБ)
- G++ (C++): 73 744 байта (~ 74 КБ)
- Clang (C): 1032 байта (1 КБ)
- Клан G++ (C++): 73 744 байта (~ 74 КБ)
Для компиляции я использую следующие команды:
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
для отображения пиков.
Я что-то здесь не так делаю?