При использовании того же кода простая замена компилятора (с компилятора C на компилятор C ++) изменит объем выделяемой памяти. Я не совсем уверен, почему это так, и хотел бы понять это больше. Пока что лучший ответ, который я получил, - это «вероятно, потоки ввода-вывода», который не очень информативен и заставляет меня задаться вопросом об аспекте 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 байта (1 КБ)
- G ++ (C ++): 73744 байта (~ 74 КБ)
- Clang (C): 1032 байта (1 КБ)
- Clang ++ (C ++): 73744 байта (~ 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
для отображения пиков.
Я что-то здесь делаю не так?