我想知道有多大的物体对于堆栈来说太大了?如果我们正在谈论普通PC(无论是Windows还是某些Linux)。我试图找到答案,但如果对象太大,我发现所有的东西都是在堆上分配的。但是什么太大?几KB?或几百KB?我知道这通常不是问题,但由于我不知道答案,所以它困扰着我。堆栈应该如何使用大对象堆栈?
一些代码:
int main()
{
int a[1000][300]; /* enough for stack overflow :) on Visual Studio 2012 without any specific setting. int a[1000][250] is Ok */
return 0;
}
一些更多:
int main()
{
MySmallClass a; // I want to use RAII
MyBigClass b; // ouch I shouldn't do it
unique_ptr<MyBigClass> c(new MyBigClass()) // So I would do something like this to keep RAII
return 0;
}
由于Visual Studio中似乎有问题,堆栈分配一样大,只有1MB它似乎是合理的分配堆栈对象上由于堆栈可能会相当深,因此最大大小为几KB。它并不多,并且我甚至不知道(因为我不想知道)第三方对象有多大,我只能期望它们会合理的小。
我在做大静态数组测试一些性能时,实际上只遇到过这种问题。所以在现实生活中它可能不是常见的问题,但仍然...
它不是Visual Studio - 它是Windows,为您提供1MB的默认堆栈大小。如果你控制线程创建,你可以要求更多。 – Gabe 2014-08-29 17:27:12
'这不算什么,我甚至不知道第三方对象(因为我根本不想知道)他们有多大'任何第三方库都会给你提供可以很容易地把堆栈炸掉的对象。 IMO低质量图书馆。 – PaulMcKenzie 2014-08-29 17:33:57
这为什么如此重要?只要选择一个任意的限制,然后回去做有用的工作。如果你不能挑选自己,那么*完美*限制显然是65536字节。 – fredoverflow 2014-08-29 17:41:35