我应该在频繁使用的函数上使用“内联”吗?

发布于 2024-12-11 18:01:16 字数 308 浏览 0 评论 0 原文

我有一个 cnVector 类,它表示 3 维空间中的一个点。 其运算符 + - * / 被大量使用。
他们的实现非常短:

cnVector cnVector::operator + (const cnVector& v) const {
    return cnVector(
        x + v.x,
        y + v.y,
        z + v.z );
}

我的问题是,因为这个函数非常短,所以尽管它的使用很频繁,我是否应该内联它?或者在使用它时会生成太多代码吗?

I have a class cnVector that represents a point in 3 dimensional space.
Its operators + - * / are used intensively.
Their implementation is very short:

cnVector cnVector::operator + (const cnVector& v) const {
    return cnVector(
        x + v.x,
        y + v.y,
        z + v.z );
}

My question is, because this function is very short, should I inline it although its intensive use? or would it generate too much code when using it that much?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

烂人 2024-12-18 18:01:17

是的,你可能应该这样做。 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

靑春怀旧 2024-12-18 18:01:17

请记住,使用内联永远不能保证,它只是给编译器一个提示。我怀疑内联实际上会增加可执行文件的大小很多,该函数本身非常小。
调用函数的大小几乎与函数本身相同。

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.

§普罗旺斯的薰衣草 2024-12-18 18:01:17

内联应用于您在命名空间范围的标头中定义的所有函数,以避免破坏一个定义规则。顺便说一句,尽管有关键字名称,但这与内联完全无关。 (或者将它们放在匿名命名空间中。)

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.

这样的小城市 2024-12-18 18:01:17

编译器完全能够根据所选的优化配置文件来决定是否内联函数。

如果编译器不这样做,您应该内联一个函数,并且使用实际数据集进行分析表明您在该函数上花费了大量时间,使用该函数的算法是一种高效的算法,如果内联它会显示出速度使用所述数据集改进基准。

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.

淡淡離愁欲言轉身 2024-12-18 18:01:17

如果有疑问,请使用内联和不使用内联进行编译,并比较执行速度和大小。编译器通常提供一个用于分析的开关,如上所述,以查看函数调用的成本(按时间衡量),

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,

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文