gpt4 book ai didi

c++ - 一般来说,大量的小函数调用会损害性能吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:06:07 25 4
gpt4 key购买 nike

假设我需要完成三项任务。第一个选项是这样的:

void doAllStuffInOneFunc() {
//code block for task 1
...
...
//code block for task 2
...
...
//code block for task 3
...
...
}

或者,以下内容可能更利于可读性和维护:

 void doAllStuffByCallingOtherFuncs() {
doTask1();
doTask2();
doTask3();
}

我将为第二种选择支付多少费用?

最佳答案

如果代码在编译单元中是“已知”的,并且函数不是太复杂,大多数现代编译器无论如何都会内联代码。如果该函数也声明为 static,那么它不会生成“真正的函数”。

编辑 3:

关于static的解释:当一个自由函数(不是类的成员)可用于内联时,如果编译器不确定调用该函数的所有地方都是内联的,它也产生一个外线函数(又名“真实函数”)。

如果一个自由函数被声明为static,它告诉编译器这个函数是“局部于这个编译单元”的,所以没有其他人会调用这个函数。如果编译器然后内联此编译单元中的所有调用,则它也不需要生成“外联”函数,因为编译器可以知道对该函数的所有调用。

另请注意,获取函数的地址也会强制编译器创建一个外联函数,因为函数指针必须指向某个地方[尽管在非常特殊的情况下,我已经看到编译器内联函数通过调用函数指针也是]

与所有性能问题一样,如果它在您的应用程序中真的很重要,那么对实际代码(及其不同变体)进行基准测试并进行分析是确保一切正常的关键。没有“这是正确答案”这样的东西,不同的编译器(在不同的平台上)具有不同的设置会做不同的事情。

编辑:除非有证据表明代码可读性差的代价是值得的,否则不要为了优化而牺牲可读性。无论如何,很少有整体代码通常对性能很重要。

Edit2:如果您还可以在其他函数中重用某些代码,那将是一个额外的好处。但是,通常,使代码可读性是首先拆分为函数的关键目标。

关于c++ - 一般来说,大量的小函数调用会损害性能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16421895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com