[atmel studio的编译器对C代码的优化

问题描述 投票:0回答:1

我正在使用Atmel Studio 7,因此,优化级别为-O1。我可以检查编译器本身正在优化的代码部分吗?如果禁用优化,则我的二进制文件大小为12KB,并且在使用优化级别-O1时,二进制文件大小为5.5KB。

gcc avr avr-gcc avr-studio7
1个回答
0
投票

我可以检查编译器本身正在优化的代码部分吗?

[All该代码已由编译器优化,即受优化标志的影响,但

  1. 是从库(libgcc.alibc.alibm.alib<device>.a)中拖动的代码。

  2. 启动代码(crt<device>.o),也包括向量表,或来自其他对象的代码,这些对象已经存在并且在当前编译中没有(重新)编译。当您更改其中的标志时,后者可能与Makefile一起发生:如果模块不依赖Makefile本身,则make不会重建它们。

  3. 来自组装模块(*.S*.sx*.s)的代码,如果预处理的组装代码不使用通过#ifdef __OPTIMIZE__或类似方法进行的条件组装。

  4. 内联汇编中的代码,如果没有优化内联汇编。

为了确定这是否有效,您可以分别:

  1. -Wl,-Map,file.map链接并检查该地图文件(文本文件)。它将列出由于哪些未定义符号而已将哪些对象从何处拖动。

  2. 启动代码已链接,但您-nostartfiles除外。将-Wl,-v添加到链接阶段,您将看到crt<device>.o被链接。

  3. 您知道编译单元,汇编模块,对吗?

  4. -save-temps添加到编辑中。内联汇编将在中间*.s文件中显示为

    /* #APP */
    ;  <line> "<compilation-unit>"
        <inline-asm-code>
    /* #NOAPP */
    
© www.soinside.com 2019 - 2024. All rights reserved.