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

前端之家收集整理的这篇文章主要介绍了c – 无法使用内联功能的时间前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在研究C中的内联函数,并且已经讨论了有关其使用限制的部分.它说:

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

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

解决方法

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

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

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

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

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

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

原文链接:https://www.f2er.com/c/116798.html

猜你在找的C&C++相关文章