微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

解决方法

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

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

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐