有多大是有一定程序的堆栈存储器,以及是否有可以将它设置任何编译器标志?(How big is the

2019-08-17 11:07发布

正如标题指出:有没有关于栈的大小,任何一般的“经验法则”。 我猜大小会根据操作系统的不同,体系结构,高速缓存(S)的大小,多少可用RAM等。

但是可以在任何一般的说,或者是有什么办法找出来,怎么叠的多, 这个程序被允许使用? 作为奖励的问题是有没有办法(与编译器标志等(想大多数是C / C ++在这里,但也比较一般)),该堆栈的大小可以设置为用户的固定大小?

顺便说一句,我问严格出于好奇,我并没有一个堆栈溢出。 :)

Answer 1:

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

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

你也可以在这里找到在计算器上一些存在的问题。



Answer 2:

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

在托管代码(C#,VB等),你可以强制一个新的线程来与这个构造函数不同的堆栈大小:

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

要更改Windows程序的默认线程的堆栈大小,无论是管理还是没有,你可以使用EDITBIN实用程序:

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



文章来源: How big is the stack memory for a certain program, and are there any compiler flags that can set it?