在C#中堆栈容量
有人能告诉我在C#中的堆栈容量是多less?
我正在尝试使用30,000个项目的数组形成一个三维网格closures的对象。
.NET应用程序的默认堆栈大小为1 MB(32位ASP.NET应用程序的默认值为256 KB,64位ASP.NET应用程序的默认值为512 KB),但可以更改。 对于应用程序,您可以通过修改可执行文件的PE标头来更改默认大小。 对于你创build的线程,你可以使用构造函数重载来获取堆栈大小。
但是正如Anton Tyjhyy在他的回答中指出的那样,数组是引用types,因此位于堆上(即使数组碰巧拥有一堆值types)。
你的数组将生活在堆上,堆栈的大小与你的情况无关。
堆栈大小是可configuration的, 可以用几种不同的方式设置 。
要使用堆栈来存储数组,你必须使用指针和堆栈分配的不安全的代码来分配堆栈上所需的内存空间。
如果要检查当前.Net程序集的值,则可以使用Visual Studio命令提示符附带的ILDASM
命令来完成此操作。 一旦你启动了这个工具,打开你的程序集,然后进入View -> Headers
菜单。 现在向下滚动到新打开的Headers
窗口中的PE Optional Header (32 bit)
部分。 你会看到两个字段:
- 堆栈储备的大小 – 这是不言自明的。 这是分配给程序/应用程序中创build的任何线程的默认栈内存大小。
- 堆栈提交的大小 – 提交的堆栈空间是 – (从这里引用Hans Passant)
所述空间在操作系统的分页文件中被保留,所以在必要时可以随时将堆栈换出。