请问C#中的堆栈容量是多少。
我正在尝试使用包含30,000个项目的数组来构建一个三维网格封闭对象。
.NET应用程序的默认堆栈大小为1 MB(32位ASP.NET应用程序默认为256 KB,64位ASP.NET应用程序默认为512 KB),但您可以更改它。对于应用程序,您可以通过修改可执行文件的PE头来更改默认大小。对于您创建的线程,您可以使用带有堆栈大小参数的构造函数重载。
但是,正如Anton Tyjhyy在他的回答中指出的那样,数组是引用类型,因此位于堆上(即使该数组恰好保存一堆值类型)。
stackalloc
在栈上分配一个数组。此外,仅因为某个类型是引用类型并不一定意味着它将在堆栈或堆上分配,这取决于CLR的实现,在.NET实现中,它在几种特殊情况下有所不同(类型的大小和作用域)。 - Michael J. GrayILDASM
命令来实现。启动工具后,打开程序集,然后转到View-> Headers
菜单。现在在新打开的Headers
窗口中向下滚动到PE Optional Header (32 bit)
部分。您将看到两个字段:
所述空间保留在操作系统的分页文件中,因此当需要时可以始终交换堆栈。
如果要使用栈来存储数组,您需要使用不安全代码和指针以及stackalloc在堆栈上分配所需的内存空间。