|
|
1
10
在大多数unix-y平台上,堆栈大小(默认情况下)为8MB,在Windows上为1MB(即,因为Windows具有
a deterministic way for recovering from out of stack problems
,而unix-y平台通常抛出
如果您的分配很大,那么在堆上分配和在堆栈上分配之间不会有太大的性能差异。当然,堆栈的每次分配效率略高,但如果您的分配很大,那么分配的数量可能会很小。 如果你想要一个更大的类似堆栈的结构,你可以随时编写自己的分配器,它从malloc获得一个大块,然后以类似堆栈的方式处理分配/释放。
|
|
|
2
4
程序的主线程获得的默认堆栈大小是编译器特定的(和/或操作系统特定的),您应该查看适当的文档来了解如何扩大堆栈。 可能发生的情况是,您可能无法将程序的默认堆栈放大到任意大的大小。 然而,正如已经指出的那样,您可以在运行时创建一个具有所需大小堆栈的线程。
无论如何
|
|
|
3
3
两者之间最重要的区别
它只对小数据结构有用,因为大数据结构会破坏堆栈的缓存位置,这会给您带来相当大的性能打击。作为局部变量的数组也是如此。
使用
一般规则是:不要将大数据结构(>=1k)放在堆栈上。堆栈不按比例缩放。这是一种非常有限的资源。 |
|
|
4
2
回答第一个问题:相对于堆大小,堆栈大小通常很小(这在大多数Linux应用程序中都适用)。 如果您计划的分配很大 相对的 到实际的默认堆栈大小,那么我认为最好使用堆中的动态分配(而不是试图增加堆栈大小)。使用内存的成本(填充、读取、操作)可能会远远超过分配的成本。在这种情况下,通过从堆栈中进行分配,您不太可能看到可衡量的好处。 |