内联C中另一个内联函数内的函数

gra*_*amm 6 c inline function

我目前有内联函数调用另一个内联函数(一个简单的4行大getAbs()函数).但是,我通过查看汇编代码发现"大"内联函数内联良好,但编译器使用bl跳转来调用getAbs()函数.

是不是可以在另一个内联函数中内联函数?顺便说一下,这是嵌入式代码,我们不使用标准库.

编辑:编译器是WindRiver,我已经检查过内联是否有益(4条指令而不是+ -40).

pax*_*blo 8

inline关键字是建议编译器,仅此而已.你可以自由地接受这个建议,完全忽略它,甚至欺骗你,并告诉它它正在这样做,而事实并非如此.

强制代码内联的唯一方法是将其内联编写.但是,即便如此,编译器也可能决定更好地了解并决定将其转移到另一个函数.它为您的特定源生成可执行代码有很大的余地,前提是它不会改变它的语义.

现代编译器能够生成比大多数开发人员在装配中手工制作更好的代码.我认为inline关键字应该与关键字的路径相同register.

如果您已经看到gcc的疯狂优化级别的输出,您将理解为什么.它产生了我梦寐以求的代码,这让我花了很长时间才能理解.

顺便说一句,检查出什么优化技术是GCC实际上有,包括包含文本"内联"或"内联"非常多.


Pau*_*l R 8

根据您使用的编译器,您可能会鼓励编译器不太内联,例如您可以使用的gcc,您可以使用的__attribute__ ((always_inline))英特尔ICC icc -inline-level=1 -inline-forceinline,以及您可以使用的Apple的gcc gcc -obey-inline.