Оптимизация кода на C компилятором для студии atmel
Я использую Atmel Studio 7, и уровень оптимизации составляет -O1. Могу ли я проверить, какая часть кода оптимизируется самим компилятором? Если я отключаю оптимизацию, мой размер двоичного файла составляет 12 КБ, и при использовании уровня оптимизации -O1, размер двоичного файла составляет 5,5 КБ.
0 ответов
Могу ли я проверить, какая часть кода оптимизируется самим компилятором?
Весь код оптимизирован компилятором, т.е. зависит от флагов оптимизации, кроме
Это код, который вытащили из библиотек (
libgcc.a
,libc.a
,libm.a
,lib<device>.a
).Код запуска (
crt<device>.o
), который также включает векторную таблицу или код из других объектов, которые уже существуют и не (повторно) компилируются в текущей компиляции. Последнее может произойти с Makefile, когда вы измените в нем флаги: если модули не зависят от самого Makefile,make
не буду их восстанавливать.Код из сборочных модулей (
*.S
,*.sx
,*.s
) при условии, что предварительно обработанный ассемблерный код не использует условную сборку с помощью#ifdef __OPTIMIZE__
или похожие.Код на встроенной сборке, при условии, что встроенный asm не оптимизирован.
Чтобы определить, действует ли что-либо из этого, вы можете соответственно:
Связать с
-Wl,-Map,file.map
и проверьте этот файл карты (текстовый файл). Он будет перечислять, какие объекты были перетащены, откуда и из-за какого неопределенного символа.Код запуска привязан, кроме вас
-nostartfiles
. Добавить-Wl,-v
на этапе ссылки, вы увидитеcrt<device>.o
связаны.Вы знаете свои единицы компиляции, модули сборки, не так ли?
Добавить
-save-temps
к сборнику. Встроенный asm будет отображаться в промежуточном*.s
файл как/* #APP */ ; <line> "<compilation-unit>" <inline-asm-code> /* #NOAPP */