c – 无法使用内联功能的时间

我正在研究C中的内联函数,并且已经讨论了有关其使用限制的部分.它说:

The compiler also cannot perform
inlining if the address of the
function is taken implicitly or
explicitly.

有人可以向我解释,也许是某种例子,究竟是什么意思?

解决方法

编译器对函数内联有两个不同的决定:

>是否内联特定函数调用;
>是否存在函数的非内联版本.

一个是由编译器根据具体情况决定的,如果在那时可以进行内联.如果函数是虚函数或通过函数指针调用它是不可能的,并且它无法在编译时确定要调用哪个函数.如果编译器无法使用该定义,则可能是因为它在不同的转换单元中定义,并且编译器不执行“整个程序优化”.该决定可能会或可能不会受到函数是否被内联声明以及其他因素(例如其大小和调用频率)的影响.

第二个取决于是否需要非内联版本.如果没有内联任何调用,则需要它.如果任何东西需要函数的地址,它也将(根据你的引用)被要求,因为它必须有一个地址.这可以直接发生(例如通过将地址分配给函数指针),也可以间接发生(例如,虚函数需要将其地址存储在某处以根据对象的动态类型查找运行时).

非内联版本的存在不会阻止对函数的任何特定调用进行内联,尽管它可能会影响编译器的决策,特别是如果它被配置为优化代码大小.

总而言之,您的报价过于简单,并不完全准确;如果地址被采用,编译器仍然可以“执行内联”,它只是不能省略非内联版本.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...