C#中的堆栈容量

时间:2009-05-05 07:18:11

标签: c# .net clr stack

有人能告诉我C#中的堆栈容量是什么。

我正在尝试使用30,000个项目的数组形成3D网格闭合对象。

5 个答案:

答案 0 :(得分:71)

.NET应用程序的默认堆栈大小为1 MB(对于32位ASP.NET应用程序,默认值为256 KB,对于64位ASP.NET应用程序,默认值为512 KB),但您可以更改它。对于应用程序,您可以通过修改可执行文件的PE头来更改默认大小。对于您创建的线程,您可以使用占用堆栈大小的构造函数重载。

但是正如Anton Tyjhyy在他的回答中指出的那样,数组是引用类型,因此位于堆上(即使数组碰巧拥有一堆值类型)。

答案 1 :(得分:53)

你的数组将存在于堆中,堆栈大小与你的情况无关。

答案 2 :(得分:29)

堆栈大小可配置且can be set in several different ways

答案 3 :(得分:5)

要使用堆栈存储数组,必须使用带有指针的不安全代码和stackalloc来在堆栈上分配所需的内存空间。

答案 4 :(得分:5)

如果要检查当前.NET程序集的值,可以使用Visual Studio命令提示符附带的ILDASM命令来执行此操作。启动该工具后,打开组件,然后转到View -> Headers菜单。现在向下滚动到新打开的PE Optional Header (32 bit)窗口中的Headers部分。您将看到两个字段:

  1. 堆栈保留的大小 - 这是不言自明的。这是分配给在程序/应用程序中创建的任何线程的默认堆栈内存大小。
  2. 堆栈提交的大小 - 提交的堆栈空间为 - (从here引用Hans Passant)
  3.   

    所述空间在操作系统的分页文件中保留   必要时,总是可以换掉堆栈。

    enter image description here