如果我在声明之前返回,是否在堆栈上分配变量?

Det*_*roc 5 c++

假设我有一个粗糙结构如下所示的函数:

int aRecursiveFunction(const SomeLargeStructure *a, int x) {
    if (end recursion)
        return 0;
    // ...
    if (something that is mostly true)
        return aRecursiveFunction(a, x+1)+1;
    // ...
    SomeLargeStructure copy = *a;
    alter(&copy);
    return aRecursiveFunction(&copy, x);
}
Run Code Online (Sandbox Code Playgroud)

我需要知道的是,出于性能原因,copy在该点之前函数结束的90%的情况下,是否将在堆栈上创建(这是一个大型结构)的空间.或者它实际上甚至不重要?它取决于编译器吗?将此部分作为另一个功能分开是否更好?

谢谢.

编辑:澄清,sizeof(SomeLargeStructure)大约500,它只有基本类型和数组(没有特殊的构造函数或赋值运算符等).

编辑2:好的,结论似乎是堆栈空间可能每次都会被分配,但它不会影响性能.堆栈溢出不是问题,所以关闭.

Dav*_*rtz 5

在大多数平台上,可能需要的最大堆栈空间在函数入口上分配.但通常分配堆栈空间只是添加,因此分配的空间量对性能没有影响.

你的问题看起来像对我的过早优化.这不是算法问题,您没有测量性能问题.那你为什么还要考虑微优化呢?

  • 它还会影响性能:记住缓存,这对堆栈上的东西非常重要! (2认同)