我正在使用Atmel Studio 7,因此,优化级别为-O1。我可以检查编译器本身正在优化的代码部分吗?如果禁用优化,则我的二进制文件大小为12KB,并且在使用优化级别-O1时,二进制文件大小为5.5KB。
我可以检查编译器本身正在优化的代码部分吗?
[All该代码已由编译器优化,即受优化标志的影响,但
是从库(libgcc.a
,libc.a
,libm.a
,lib<device>.a
)中拖动的代码。
启动代码(crt<device>.o
),也包括向量表,或来自其他对象的代码,这些对象已经存在并且在当前编译中没有(重新)编译。当您更改其中的标志时,后者可能与Makefile一起发生:如果模块不依赖Makefile本身,则make
不会重建它们。
来自组装模块(*.S
,*.sx
,*.s
)的代码,如果预处理的组装代码不使用通过#ifdef __OPTIMIZE__
或类似方法进行的条件组装。
内联汇编中的代码,如果没有优化内联汇编。
为了确定这是否有效,您可以分别:
与-Wl,-Map,file.map
链接并检查该地图文件(文本文件)。它将列出由于哪些未定义符号而已将哪些对象从何处拖动。
启动代码已链接,但您-nostartfiles
除外。将-Wl,-v
添加到链接阶段,您将看到crt<device>.o
被链接。
您知道编译单元,汇编模块,对吗?
将-save-temps
添加到编辑中。内联汇编将在中间*.s
文件中显示为
/* #APP */
; <line> "<compilation-unit>"
<inline-asm-code>
/* #NOAPP */