Stack capacity in C#

天大地大妈咪最大 提交于 2019-12-17 02:31:37

问题


Could someone tell me what the stack capacity is in C#.

I am trying to form a 3D mesh closed object using an array of 30,000 items.


回答1:


The default stack size for a .NET application is 1 MB (default is 256 KB for 32-bit ASP.NET apps and 512 KB for 64-bit ASP.NET apps), but you can change that. For the application you can change the default size by modifying the PE header of the executable. For threads you create, you can use the constructor overload that takes a stack size.

But as Anton Tyjhyy points out in his answer, arrays are reference types and thus located on the heap (even if the array happens to hold a bunch of value types).




回答2:


Your array will live on the heap, stack size is irrelevant in your case.




回答3:


The stack size is configurable and can be set in several different ways.




回答4:


If you want to check the value for your current .NET assembly then you can do so by using ILDASM command that comes in with Visual Studio command prompt. Once you have started the tool, open your assembly and then go to View -> Headers menu. Now scroll down to PE Optional Header (32 bit) section in the newly opened Headers window. You will see two fields:

  1. Size of stack reserve - This is self-explanatory. This is default stack memory size allocated to any thread getting created in your program/application.
  2. Size of stack commit - committed stack space is - (Quoting Hans Passant from here)

The said space is reserved in the operating system's paging file so the stack can always be swapped out when necessary.




回答5:


To use stack for storing an array you have to use unsafe code with pointers and stackalloc to allocate desired memory space on the stack.



来源:https://stackoverflow.com/questions/823724/stack-capacity-in-c-sharp

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!