Как получить размер сегмента данных в C++

Мне нужно провести анализ требований к памяти для одной библиотеки, написанной на C++, потому что инженеры HW должны получить представление о требованиях к памяти нашего оборудования, над которым мы работаем. Я могу измерить пик размера кучи, я могу измерить размер стека, но я не знаю, как оценить / измерить размер сегмента данных и размер Bss. Есть ли метод в Visual Studio или GCC? Я предполагаю, что это будет отличаться от компилятора к компилятору и от платформы к платформе, но оценка мне подходит.

3 ответа

Решение

Во время сборки:

  • Для VC++ запустить link.exe /map,

  • Для запуска GCC ld -Map,

Оба варианта генерируют файл карты, который будет содержать размеры сегментов.

E сть size полезность. Например, для проекта ARM MCU это может быть что-то вроде:

arm-none-eabi-size --format=sysv "program_name.elf"

Пример вывода:

program_name.elf  :
section             size        addr
.text              14516           0
.data                160   268435456
.bss                1328   268435616
.stack              2528   268436944
.debug_aranges      2384           0
.debug_info        40951           0
.debug_abbrev       8870           0
.debug_line        27790           0
.debug_frame        6664           0
.debug_str         42157           0
.debug_loc          7074           0
.debug_macinfo    426030           0
.ARM.attributes       47           0
.debug_ranges       1760           0
.comment              96           0
.debug_macro        9236           0
Total             591591

Ты можешь использовать objdump получить размер текста, данных и сегментов bss в системах Linux. Вы можете проверить вывод для .bss а также .text разделы.

Смотрите здесь для более подробного объяснения.

Другие вопросы по тегам