假设我有一个粗糙结构如下所示的函数:
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(©);
return aRecursiveFunction(©, x);
}
Run Code Online (Sandbox Code Playgroud)
我需要知道的是,出于性能原因,copy在该点之前函数结束的90%的情况下,是否将在堆栈上创建(这是一个大型结构)的空间.或者它实际上甚至不重要?它取决于编译器吗?将此部分作为另一个功能分开是否更好?
谢谢.
编辑:澄清,sizeof(SomeLargeStructure)大约500,它只有基本类型和数组(没有特殊的构造函数或赋值运算符等).
编辑2:好的,结论似乎是堆栈空间可能每次都会被分配,但它不会影响性能.堆栈溢出不是问题,所以关闭.
在大多数平台上,可能需要的最大堆栈空间在函数入口上分配.但通常分配堆栈空间只是添加,因此分配的空间量对性能没有影响.
你的问题看起来像对我的过早优化.这不是算法问题,您没有测量性能问题.那你为什么还要考虑微优化呢?