Максимальное использование стека из файла эльфа
Есть ли способ получить максимальное "использование стека" кода проекта vxworks C
скомпилирован для архитектуры PPC с использованием ccppc
на верстаке WindRiver?
2 ответа
По разным очевидным причинам нет практического способа получить это из статического анализа - предсказать ход программы нетривиально. Возможно, для простой программы, но любую полезную систему с сетевыми интерфейсами, файлами конфигурации и т. Д. Было бы практически невозможно моделировать. В частности, рекурсия вызовет серьезные проблемы.
Гораздо более полезным было бы фактическое использование стека в работающей системе, и, к счастью, для этого есть инструмент - checkStack
командная оболочка.
Это основано на том, что стек был инициализирован по известному шаблону (я думаю, 0xEE), и checkStack затем ищет высокую отметку использования - то есть первое местоположение, которое не содержит этого известного значения.
Я не знаю метода для статического анализа использования стека без запуска какого-либо кода. Однако, я знаю, что есть два способа, которые могут дать хороший совет:
1) Заполните стек некоторым известным шаблоном (например,0xAA
). Выполните ваш код в течение разумного периода времени. Затем снова проанализируйте стек, чтобы увидеть самую высокую точку, до которой содержимое стека было изменено. У этого метода уже есть проблема: сколько времени занимает "разумное количество времени"?
2) Сэмплируйте значение Stack Pointer во время выполнения программы, а затем сделайте статистическое предположение об объеме использования стека.
Как @ Евгений Ш. указал, что, вероятно, нет способа получить использование стека без выполнения какого-либо кода.