Как рассчитать размер текста, родата, данных и BSS одного модуля в C? - PullRequest
0 голосов
/ 01 ноября 2019

В моем проекте я сначала компилирую aa_1.c, aa_2.c ... из папки A, затем компилирую bb_1.c bb_2.c ... из папки B. Затем я использую gcc-ar для генерации libapps.a. Наконец, я связываюсь с другими статическими библиотеками.

Теперь я хочу вычислить text, rodata, data и bss раздел папки A.

Мой метод заключается в выполнении gcc-nm -S --size-sort folder/*.o и накоплении text, rodata, data и bss разделов. Но некоторые функции могут быть оптимизированы, потому что они никогда не вызываются.

Так как я могу рассчитать размеры text, data, rodata и bss?

У меня также есть другой вопрос, с использованием gcc-nm -S --size-sort a.o нет типа 'b'. Но использование gcc-size a.o показывает, что bss раздел занимает 8 байтов. Так какой из них прав?

1 Ответ

0 голосов
/ 02 ноября 2019

Согласно Получить список статических библиотек, используемых в исполняемом файле , имена библиотек отбрасываются в процессе компоновки.

Вы можете добавить -Xlinker -Map=file.map к команде ссылки, а затем попытаться извлечь информацию из 'file.map'.

...