我正在使用 Atmel Studio 7,优化级别为 -O1。我可以检查编译器本身正在优化的代码部分吗?如果我禁用优化,我的二进制文件大小为 12KB,并且在使用优化级别 -O1 时,二进制文件大小为 5.5KB。
问问题
603 次
1 回答
1
我可以检查编译器本身正在优化的代码部分吗?
所有代码都由编译器优化,即受优化标志的影响,除了
它是从库 (
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
到编译中。内联 asm 将在中间*.s
文件中显示为/* #APP */ ; <line> "<compilation-unit>" <inline-asm-code> /* #NOAPP */
于 2020-02-17T11:39:24.580 回答