Оценка объема памяти данных и кода во время выполнения - PullRequest
1 голос
/ 21 августа 2009

Я работаю над проектом на языке программирования C для разработки приложения, которое можно перенести на несколько различных платформ микроконтроллеров, таких как ARM \ Freescale \ PIC microcontroller. Я сейчас занимаюсь разработкой этого приложения для Linux, и мне придется портировать его на вышеупомянутые платформы.

Я хотел бы знать, существуют ли какие-либо инструменты (желательно с открытым исходным кодом), с помощью которых я могу определить «код» и объем \ размер памяти данных, прежде чем переносить его на новую платформу.

Я искал его в «Google» и пока не нашел ничего, даже для Linux.

любая помощь от тебя очень поможет мне.

-Викас

Ответы [ 4 ]

1 голос
/ 22 сентября 2009

Для небольшой программы большая часть размера определяется библиотеками / DLL, от которых зависит ваша программа. Поскольку вы ссылаетесь на ARM / Freescale / Pic, я предполагаю, что вы имеете дело с компактными встроенными приложениями, в которых размер данных измеряется в байтах, а не в мегабайтах.

Для вашего собственного кода разница в размере будет определяться:

  • размер слова (т.е. 32-битные программы имеют тенденцию быть немного больше / больше данных, чем 8-битные)
  • (т.е. код Intel в сравнении с ARM, freescale, PIC)

В вашем случае я ожидаю, что PIC является наиболее важной частью (для ограничений RAM / ROM). Таким образом, достаточный мониторинг размера компиляции PIC во время разработки ПК является достаточным. Выход компоновщика будет содержать информацию о размере TEXT / DATA / BSS, которую вы можете отслеживать.

Обычно я работаю над встроенными системами. В моей работе большая часть размера данных известна во время разработки (то есть количество буферов * размер буфера). Что касается размера кода, у меня есть практические правила для разных архитектур, которые помогают мне проверять работоспособность во время разработки. Например, я определяю набор некоторых библиотек существующего кода, для которых я знаю номера производительности и размера для каждой архитектуры. Таким образом, я знаю, какое соотношение я могу ожидать во время разработки. Если программа для ПК содержит 1 МБ данных, она не помещается в 8-разрядный PIC .....

0 голосов
/ 22 сентября 2009

Ваш компилятор может / сгенерирует файл карты. Файл карты, вообще говоря, будет иметь код и размер данных (или диапазоны местоположения). Могут быть различия между разными компиляторами для разных целей. И, как указано в других публикациях, ваши зависимости от поставляемых библиотек также влияют на общее использование памяти.

0 голосов
/ 12 сентября 2009

Размер вашего сегмента текста / кода будет зависеть от уровня оптимизации и серверной части. GCC может быть настроен для генерации этой информации для вас.

Время выполнения немного сложнее, как сказал Джереми. Помимо его предложения, вы также можете попробовать gcov и / или gprof для анализа вашей программы в контексте наиболее распространенных сценариев использования. Этот вид инструментовки ориентирован скорее на сложность, чем на размер, но, по крайней мере, вы будете лучше знать, на чем будет сосредоточен анализ памяти.

0 голосов
/ 21 августа 2009

Ничто не может сказать вам, сколько памяти понадобится вашему приложению. Вам нужно будет сделать некоторые предположения о том, как он будет использоваться, и попробовать ваше приложение в различных сценариях.

Во время тестирования вы можете отслеживать статистику использования памяти в файловой системе / proc или использовать команду ps для того же.

...