.NET中堆栈内存的分配

今天,我已经阅读了CodeProject关于内存管理.NET的博客。

网址 - 文章

它说 -

退出方法(好玩):现在最后执行控制开始退出方法。 当它通过结束控制时,它清除所有在堆栈上分配的内存变量。 换句话说,与int数据类型有关的所有变量都从堆栈以'LIFO'方式取消分配。

巨大的捕获 - 它没有取消分配堆内存。 该内存稍后将由垃圾收集器取消分配。

根据我的理解,垃圾收集器只取消分配堆内存。 那么,谁将取消分配堆栈内存?

请建议。


简而言之:

堆栈内存不会被释放。 这是一块将被重用的内存块。 每当范围声明变量(压入堆栈)时,它将在范围退出时弹出。

所以当一个方法被调用时,参数(一个值或一个引用指针)被压入(复制)到堆栈中,并在方法结束时从中弹出。 (弹出只是调整一个指针(索引)与内存)

这就是为什么在{ }中声明的变量不可用于de }

这块内存是每个线程。


在.NET中,变量位于堆栈上,无论它是否包含数值(值类型),结构(完全位于堆栈中)或对对象的引用(即对象的管理地址,对象本身位于堆上)。

此外,人们有时会将变量与类字段混淆。 字段和所有类成员都位于堆上,在实例化对象时分配的区域内。

因此,没有任何变量的分配或释放,因为它们只是超出范围的值。 变量超出范围后,GC无法到达实际(堆)对象,并最终收集它。

链接地址: http://www.djcxy.com/p/13873.html

上一篇: Allocation of the Stack memory in .NET

下一篇: object created in function, is it saved on stack or on heap?