我正在为 MSP430 编写嵌入式代码,使用最高优化级别的 IAR 编译器(速度或大小不会改变任何东西)。
我将一个函数定义为静态的,然后在同一个文件中只引用它一次。由于该函数具有内部链接,并且仅使用一次,因此我希望优化器执行内联扩展。我看不出有理由不这样做。
该函数很短,它产生 16 个字的机器码。它是从 ISR 调用的。添加 inline 关键字使函数内联,但优化器似乎需要提示。内联将两个push
/ pop
s 保存到堆栈中, onecalla
和 one reta
。
我是否期望执行内联扩展(即使没有inline
关键字),还是我错过了什么?
编辑:更多测试表明内联扩展取决于函数的大小,并且阈值非常低。它似乎是大约 15 或 16 个字的机器代码。在此之上,如果没有给出关键字,优化器不会扩展。
我仍然不明白为什么它不会(可读性不应该成为优化器的关注点,不是吗?),但我知道 IAR 只能回答这个问题。