Как получить размер сегмента данных в 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
разделы.
Смотрите здесь для более подробного объяснения.