Измерение размера библиотек в Linux

#linux #embedded #ram #rom

#linux #встроенный #ОЗУ #пзу

Вопрос:

Я разрабатываю S / W для некоторого устройства, которое использует Linux OS. Итак, размер библиотек (RAM / ROM), которые я использую, очень важен.

Как я могу легко рассчитать RAM / ROM, требуемые моим программным обеспечением? (включая библиотеки, которые я использовал). Я думаю, что это слишком простой вопрос для опытного разработчика Linux.

Комментарии:

1. На самом деле это сложный вопрос. Если ваша программа использует динамическое выделение памяти malloc или имеет нетривиальные шаблоны вызовов (особенно, если она имеет рекурсию), невозможно даже теоретически предсказать, сколько оперативной памяти потребуется для кучи / стека. Существуют анализаторы, которые достаточно хорошо справляются с определением требований к стеку для типичных встроенных программ, но они часто обходятся недешево.

Ответ №1:

Выполнить

 size <object>
  

или

 size <archive>
  

или

 size <shared-object>
  

. (или «целевой» размер, если вы выполняете кросс-компиляцию: arm-size, если вы используете arm-gcc)

Это даст вам

 text    data     bss     dec     hex filename
  

таблица, в которой текст имеет размер программы, bss — инициализированные глобальные переменные, а data — данные, доступные только для чтения.

Хотя это отвечает на ваш вопрос, вы, вероятно, захотите использовать определенный LdScript (при использовании ld в качестве компоновщика), где вы будете помещать разделы в доступные памяти вручную при выполнении окончательной ссылки.

Комментарии:

1. Обратите внимание, что этот инструмент отображает только статическую память. Использование памяти во время выполнения будет больше. Насколько больше, зависит от программы и использования стека и кучи.

2. Также можно использовать «ldd» для проверки разделяемых библиотек. С помощью «ldd» и «size» я могу догадаться, сколько ROM / RAM использовалось, включая библиотеки.