堆叠和堆在C锐利
可能重复:
为什么当类存储在堆(.NET)中时,堆栈存储在堆栈中?
任何人都可以告诉我内存的分配是如何完成的:哪个对象将被存储在堆栈中,哪个对象位于内存的堆部分?
3经验法则:
在C#编译器和CLR的Microsoft实现中,当值为临时值,局部变量或形式参数时,值类型会存储在堆栈中,该值既不是匿名方法的封闭外部变量,也不是迭代器块中的值。
当然,如果你不需要的话,为什么在堆栈上存储东西? 一些值类型的局部变量根本不会进入堆栈; 他们一直留在寄存器中。
值类型的其他值存储在堆盒值类型,引用类型的值类型字段等上。
值类型当然可以存储在堆栈,寄存器和托管堆上; 他们可以使用一些完全不受CLR控制的完全其他内存管理器存储在非托管内存中。
(当然要注意,在“堆栈”中使用“the”会造成误导;在一个进程中可能有很多堆栈,不需要只有一个)。
所有这些都是实施细节,如有更改,恕不另行通知。
另外,分配栈分配声明的东西显然是分配在堆栈上的。
有关此主题的更多信息,请参阅我的文章:
http://blogs.msdn.com/b/ericlippert/archive/2009/04/27/the-stack-is-an-implementation-detail.aspx
http://blogs.msdn.com/b/ericlippert/archive/2009/05/04/the-stack-is-an-implementation-detail-part-two.aspx
你为什么在乎? 运行时为您管理所有这些细节,以便您不必担心。 你只是好奇,还是这导致了一些更大的问题?
链接地址: http://www.djcxy.com/p/82711.html上一篇: Stack and heap in c sharp
下一篇: Passing a stack allocated argument by reference to an array