2015-03-02 2 views
1

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

+0

Вы пытались перекрестно скомпилировать свою целевую платформу и проверить созданные двоичные файлы? – harald

+2

Для этого GCC (pedantically, GNU binutils) имеет инструмент под названием ['size'] (http://linux.die.net/man/1/size). –

+0

Я могу перекрестно скомпилировать его для ARM в IAR Workbench. Вы имеете в виду, что должно быть возможно обнаружить это из этого IDE/инструмента как-нибудь? – qub1n

ответ

1

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

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

3

Утилита 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 
2

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

Для получения более подробного объяснения см. here.

Смежные вопросы