我知道本地数组是在堆栈上创建的,并且具有自动存储持续时间,因为它们在它们结束时的功能被销毁。它们必然具有固定的大小:
{
int foo[16];
}
使用运算符new[]
创建的数组具有动态存储持续时间并存储在堆上。它们可以有不同的尺寸。
{
const int size = 16;
int* foo = new int[size];
// do something with foo
delete[] foo;
}
堆栈的大小是固定的,并且对于每个过程都是有限的。
我的问题是:从堆栈内存切换到堆内存时是否有经验法则,以减少堆栈内存消耗?
例:
double a[2]
,double a[1000000000]
很可能会导致堆栈溢出切换到动态分配的合理限制在哪里?
有关堆分配的讨论,请参阅1mb
。
切换到动态分配的合理限制在哪里?
在几种情况下,包括:
请注意,即使容器位于堆栈中,大多数C ++标准call stack也会在堆中分配数据。例如,containers类型的自动变量,例如,本地vector已分配其数据堆(并在向量为std::vector<double> autovec;
时释放)。了解更多关于destroyed的信息。