При використанні одного і того ж коду, просто зміна компілятора (з компілятора 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 ++): 73,744 байт, (~ 74 КБ)
- Кланг (C): 1032 байт (1 КБ)
- Clang ++ (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
для показу піків.
Чи я тут щось неправильно роблю?
try
блоку за рахунок більшого сліду пам’яті, можливо, за допомогою таблиці стрибків чи чогось іншого. Можливо, спробуйте скласти без виключень і подивіться, який вплив це має. Редагувати: Насправді, повторно спробуйте відключити різні функції c ++, щоб побачити, який вплив має вплив на пам'ять.
clang++ -xc
замість clang
того ж виділення було таке, що настійно говорить про його завдяки пов’язаним бібліотекам
C
режимі та точно таку ж кількість байтових C++
режимів. Ви зробили помилку транскрипції?