<分区>
如果一个函数只在一个地方使用,并且一些分析表明它没有被内联,那么强制编译器内联它是否总是有性能优势?
显然是“剖析并查看”(并且在所讨论的函数的情况下,它确实被证明是一个小的性能提升)。我主要是出于好奇 - 使用相当智能的编译器是否有任何性能缺点?
<分区>
如果一个函数只在一个地方使用,并且一些分析表明它没有被内联,那么强制编译器内联它是否总是有性能优势?
显然是“剖析并查看”(并且在所讨论的函数的情况下,它确实被证明是一个小的性能提升)。我主要是出于好奇 - 使用相当智能的编译器是否有任何性能缺点?
最佳答案
不,有明显的异常(exception)。以这段代码为例:
void do_something_often(void) {
x++;
if (x == 100000000) {
do_a_lot_of_work();
}
}
假设 do_something_often()
经常从很多地方被调用。 do_a_lot_of_work()
很少被调用(每 1 亿次调用中就有一次)。将 do_a_lot_of_work()
内联到 do_something_ofen()
中不会给您带来任何好处。由于 do_something_often()
几乎什么都不做,如果它内联到调用它的函数中会更好,并且在极少数情况下它们需要调用 do_a_lot_of_work()
,他们称之为不合时宜。这样,他们几乎每次都节省了一个函数调用,并在每个调用点都节省了代码膨胀。
关于c++ - 如果一个函数只从一个地方调用,内联它总是更好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29174970/