Оценка объема памяти и использования процессора для библиотеки C

У меня есть статическая библиотека, написанная на C, без динамического выделения памяти.

До сих пор библиотека использовалась только в приложении для обычного i386 Linux, где было много процессора и памяти.

Теперь мне нужно попытаться создать версию библиотеки для встроенной системы ARM9 реального времени (предоставленной третьей стороной). Перед этим я должен дать приблизительные оценки объема используемой памяти и использования процессора.

Для экономии памяти я создаю крошечное приложение на своем компьютере i386, статически связывающееся с моей библиотекой, которое выполняет все функции моей библиотеки. Грубо ли верно, что проверка резидентной памяти этого приложения даст мне приблизительную оценку объема памяти моей библиотеки? Есть ли лучший способ измерить это?

Для оценки использования процессора я в растерянности. Конечно, я могу запустить тестовое приложение, упомянутое выше, в моей системе i386, но я не знаю, какие метрики, которые мне дадут (если они есть), могут перевести в нечто, относящееся к системе ARM. Есть ли способ сделать это?

1 ответ

Решение

Ваша оценка памяти звучит довольно хорошо для меня, если вы скомпилировали ее для ARM9. На самом деле, если вы кросс-компилируете библиотеку без отладочной информации и ожидаете, что все функции библиотеки будут использованы в конечном приложении, тогда размер файла библиотеки будет довольно хорошей оценкой. Единственный способ, который не сработает, это если у вас будет много инициализированных нулем глобальных (или статических) переменных. Разумеется, распределение памяти во время выполнения - это другое дело, но вы уже это учли.

Оценки размера, основанные на коде x86, могут быть в пределах одного и того же балла, но на самом деле не следует доверять Размеры также варьируются от компилятора к компилятору, поэтому попробуйте сопоставить его, если можете, но любой недавний компилятор ARM подходит для приблизительной оценки.

Что касается оценок процессора, то невозможно измерить цифру без ее измерения. Это функция архитектурной эффективности ЦП, эффективности оптимизации компилятора, тактовой частоты, скорости памяти, скорости шины, размера кеша, нагрузки на кеш, вызванной другими запущенными задачами и т. Д., И т. Д., И т. Д. И т. Д. Слишком много переменных.

Одна вещь, которую вы могли бы сделать, это использовать нотацию big-O, чтобы что-то сказать о производительности алгоритмов на разных входах.

Я бы, наверное, просто сказал "легкий" или "тяжелый". У вас, вероятно, есть идея, какая из них подходит.

Другие вопросы по тегам