![]() |
1
10
在UNIX下,如果您正在运行bash,请运行
它将列出各种限制,包括堆栈大小。我的是8192kb。您可以使用ulimit更改限制。
在窗口下,请参见 StackReserveSize StackCommitSize 实际上,堆栈地址从高地址开始(在32位平台上,接近3GB限制),并在内存分配从低地址开始时减少。这允许堆栈和内存增长,直到整个内存耗尽。 |
![]() |
2
2
在我的32位linux上,是8192K字节。所以 在你的机器上也一样。
|
![]() |
3
1
Windows(我认为Linux)都是在计算机上运行的 大堆栈模型 假设,也就是说,有一个堆栈(每个线程),其空间在线程启动之前被预先分配。 由于操作系统通常将堆栈放置在远离其他结构的地方,因此当到达ulimit时,如果发生溢出时堆栈旁边没有显示任何其他内容,则操作系统可能能够扩展堆栈。一般来说,如果您正在构建一个复杂到足以使堆栈溢出的程序,那么很可能是在动态分配内存,并且堆栈旁边的区域没有得到分配。如果分配了这样的内存,那么操作系统当然无法在其所在的位置扩展堆栈。 这意味着应用程序不能指望操作系统自动扩展堆栈。实际上,堆栈 成长。 从理论上讲,耗尽堆栈的应用程序可能能够启动具有更大堆栈的新线程,复制现有堆栈并继续,但实际上我怀疑这是否可以做到,若并没有其他原因,指向局部变量的指针堆栈将需要调整,C/C++编译器无法找到此类指针并进行调整。
我们有一种称为PARLANSE的并行编程语言,它进行堆分配,以使数千个并行计算粒度(实际上)能够以这种方式任意递归。 |
![]() |
AstralHex · 矩阵乘法代码工作不正常 4 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 4 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 5 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 5 月前 |