某个程序的堆栈内存有多大,是否有可以设置它的编译器标志?

And*_*snk 10 c c++ memory size stack

正如标题所述:关于堆栈的大小是否有任何一般的"经验法则".我猜测大小会因操作系统,体系结构,缓存大小,可用RAM数量等而有所不同.

但是一般可以说什么,或者有没有办法找出,有多少堆栈,这个程序是允许使用的?作为一个额外的问题是有任何方式(使用编译器标志等(在这里主要考虑C/C++,但也更通用))堆栈的大小可以由用户设置为固定大小?

顺便说一句,我严格要求出于好奇,我没有堆栈溢出.:)

Ben*_*igt 5

是的,您可以设置堆栈大小,它通常是一个链接器标志,它取决于您的工具链(通常由编译器的名称引用)。

您还可以在 StackOverflow 上找到几个现有问题。


Eri*_*ert 5

在Windows中,无论操作系统如何,线程的默认堆栈大小都是一百万字节.

在托管代码(C#,VB等)中,您可以使用此ctor强制新线程具有不同的堆栈大小:

http://msdn.microsoft.com/en-us/library/5cykbwz4.aspx

要更改Windows程序的默认线程的堆栈大小,无论是否管理,您都可以使用editbin实用程序:

http://msdn.microsoft.com/en-us/library/xd3shwhf.aspx