c++ - 如果一个函数只从一个地方调用,内联它总是更好吗?

标签 c++ c performance optimization micro-optimization

<分区>

如果一个函数只在一个地方使用,并且一些分析表明它没有被内联,那么强制编译器内联它是否总是有性能优势?

显然是“剖析并查看”(并且在所讨论的函数的情况下,它确实被证明是一个小的性能提升)。我主要是出于好奇 - 使用相当智能的编译器是否有任何性能缺点?

最佳答案

不,有明显的异常(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/

相关文章:

INSERT INTO 表 SELECT 与 COPY 的 PostgreSQL 性能

c++ - C++标准是否规定了标准容器的类型依赖?

c++ - 使用高度图扭曲图像?

javascript - WebAssembly.instantiate 既没有调用,也没有在 v8 嵌入中捕获

c - 字符串数组初始值设定项错误 : initializer element is not constant

JavaScript 错误/不良实践

c++ - ncurses:移动/调整窗口大小后 wgetch 无法正确读取

c - 如何终止套接字接受阻塞

c - 使用 passByValue 对 20 个整数进行排序

ios - 多个 CALayer 蒙版导致性能问题