ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 марта
458195 Топик полностью
VVB (29.10.2013 21:09, просмотров: 378) ответил fk0 на Примерно так же умеет компилятор проф. уровня им. hitech software. Но увы, доворовались, код отдан индусским студентам. Хотя тоже не панацея: все случаи (а они могут зависеть от входных данных) просмотреть не может. Типичный пример: qsort. Можно,
Понятно, что расчёты стека по указателям не провести. Я хотел узнать о простых возможностях. Статический анализ кода (cflow) это примитив, вообще не дающий понимания о ресурсах, которые будет жрать CRT или окружение С++, в случае работы над готовым elf файлом с имеющейся отладочной информацией возможно понимание ресурсов для CRT. А так, для грубой оценки, я поставил точки останова на мои вызовы системных функций для работы newlib, и смотрю глубину стека, очень наглядно при начальной инициализации (вызов конструкторов) или выдачи файлов (первое использование std::cout). Невозможно оценить необходимый стек для форматированного вывода, даже на глаз. Только экспериментально, при использовании GCC, к сожалению. >И большинство функций ведь, в среднем на большом объёме кода, все примерно одинаковый объём стек отъедают. Категорически не согласен. Многие мои задачи небольшие, и лишь несколько вызывают "тяжелые" функции Си. Соответственно, ручное определение вызовов по указателям и прописывание этой цепочки в батнике даёт 100% точный результат. Ну и следующая подстройка стека. Хорошо, что в FreeRTOS есть функция анализа максимального использования стека для каждой задачи. Сильно облегчает задачу определения необходимого стека, но с невозможностью покрытия всего кода. То есть если создать условия, позволяющие програть программу по всем веткам, то будет тоже 100% результат. Вообще, в кейле, мульте и сиэсэс есть понятия "покрытие кода", для этого нужна аппаратная поддержка трассировки (ETB и соответствующий отладчик, или XDS560+тоже макроячейка трассировки). Тогда среда сама покажет, сколько раз был заход в функцию, сколько времени она отожрала, какой код выполнился. Это всё в рилтайме, без какого-либо использования ЦПУ. Я имел удовольствие попользоваться трассировщиком Keil ULNK PRO + LPC1768 (при включении ETB), оно стоит запрашиваемых килобаксов, при серьёзной разработке. GCC такого и не снилось. Знаю, что GDB делает какие-то потуги работать с трассировкой данных, но как-то это несистемно, должна быть одна связка компилятор+отладчик+трассировщик+среда.