何时使用内联功能何时不使用?我知道inline是对编译器的提示或请求,用于避免函数调用开销。那么在什么基础上可以确定函数是否是内联的候选者?在哪种情况下应该避免内联?
3 回答
翻翻过去那场雪
TA贡献2065条经验 获得超14个赞
inline
与优化没什么关系。inline
如果给定定义的函数在程序中多次出现,并且承诺定义将在每次使用它的转换中发生,并且在它出现的任何地方它将具有完全相同的定义,则指示编译器不产生错误。
鉴于上述规则,inline
适用于简短的函数,其主体不需要包括对声明所需的额外依赖性。每次遇到定义时,都必须对其进行解析,并且可能会生成其主体的代码,因此它意味着在单个源文件中仅定义一次的函数会产生一些编译器开销。
编译器可以内联(即用对该函数执行该操作的代码替换对函数的调用)所选择的任何函数调用。过去,它“显然”无法内联未在与调用相同的转换单元中声明的函数,但随着链接时间优化的使用越来越多,即使现在也不是这样。同样正确的是标记的功能inline
可能没有内联。
慕标5832272
TA贡献1966条经验 获得超4个赞
告诉编译器内联函数是一种优化,最重要的优化规则是过早优化是所有邪恶的根源。始终编写清晰的代码(使用有效的算法),然后分析您的程序,只优化耗时太长的函数。
如果你发现一个特定的函数非常简短,并且它在一个紧密的内循环中被称为成千上万次,那么它可能是一个很好的候选者。
但是,您可能会感到惊讶 - 许多C ++编译器会自动为您编写小函数 - 他们也可能忽略您的内联请求。
- 3 回答
- 0 关注
- 633 浏览
添加回答
举报
0/150
提交
取消