我应该在频繁使用的函数上使用“内联”吗?
我有一个 cnVector 类,它表示 3 维空间中的一个点。
其运算符 + - * / 被大量使用。
他们的实现非常短:
cnVector cnVector::operator + (const cnVector& v) const {
return cnVector(
x + v.x,
y + v.y,
z + v.z );
}
我的问题是,因为这个函数非常短,所以尽管它的使用很频繁,我是否应该内联它?或者在使用它时会生成太多代码吗??
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
是的,你可能应该这样做。 C++ 中 inline 关键字的良好用例是:小函数,大量使用。
另请参阅 http://msdn.microsoft.com /en-us/library/1w2887zk%28v=vs.80%29.aspx
Yes you probably should. The good use case for the inline keyword in c++ is: small functions, heavily used.
See also http://msdn.microsoft.com/en-us/library/1w2887zk%28v=vs.80%29.aspx
请记住,使用内联永远不能保证,它只是给编译器一个提示。我怀疑内联实际上会增加可执行文件的大小很多,该函数本身非常小。
调用函数的大小几乎与函数本身相同。
Remember that using inline is never a guarantee, it just gives a hint to the compiler. I doubt inlining will actually increase executable size a lot, the function is very small in itself.
Calling the function is almost the same size as the function itself.
将
内联
应用于您在命名空间范围的标头中定义的所有函数,以避免破坏一个定义规则。顺便说一句,尽管有关键字名称,但这与内联完全无关。 (或者将它们放在匿名命名空间中。)inline
也向编译器提供对所述函数的内联调用的提示,但正如注释所指出的,编译器是相当能够自己弄清楚这一点,因此实际上并不需要关键字。Apply
inline
to all functions that you define in your header on namespace scope to avoid breaking the One Definition Rule. This, by the way, is completely unrelated to inlining, despite the keyword name. (Or put them inside an anonymous namespace.)inline
also gives a hint to the compiler to inline calls to said function, but as the comments have pointed out the compiler is quite capable of figuring that out by itself so the keyword isn’t really needed for that.编译器完全能够根据所选的优化配置文件来决定是否内联函数。
如果编译器不这样做,您应该内联一个函数,并且使用实际数据集进行分析表明您在该函数上花费了大量时间,使用该函数的算法是一种高效的算法,如果内联它会显示出速度使用所述数据集改进基准。
The compiler is perfectly capable of making a decision as to whether to inline a function or not depending on the chosen optimization profile.
You should inline a function if the compiler doesn't, and profiling with a realistic data set shows you're spending a significant amount of time in the function, the algorithm using said function is an efficient one, and if inlining it shows a speed improvement in a benchmark with said data set.
如果有疑问,请使用内联和不使用内联进行编译,并比较执行速度和大小。编译器通常提供一个用于分析的开关,如上所述,以查看函数调用的成本(按时间衡量),
If in doubt, compile it with and without inline and compare execution speed and size. The compiler usually offers a switch for profiling as mentionend above to see what the function call costs, measured in time,