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

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

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

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

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

  • 对于Microsoft Visual C ++,使用/F选项更改大小,使用DUMPBIN /HEADERS查看设置是什么 。
  • 对于GCC工具链和大多数其他Unix链接器,请使用-Wl,--stack

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

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

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

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

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

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