相关疑难解决方法(0)

.net框架中值类型和引用类型的内存分配

是否有一篇我可以阅读的高级文章可以解释如何在.net框架中为不同类型(值和引用)分配内存.

例如,我们知道值类型是在堆栈上分配空间,但是如何管理?

如何在堆中管理引用类型以及存储实际值的位置.(像任何类一样的引用类型将包含许多值类型,它们保存在哪里以及如何管理它们)

.net memory-management

4
推荐指数
2
解决办法
8465
查看次数

如果大多数数据都在堆上,那么堆栈内存的重要性/作用是什么?

我正在阅读有关Dispose模式的内容,并了解内存的分配方式.以下是http://codebetter.com/karlseguin/2008/04/28/foundations-of-programming-pt-7-back-to-basics-memory/的引用.

内存分配
....
....
唯一的例外是属于引用类型的值类型-例如User类的Id属性与User类实例本身一起去堆上.

这里也提到了有关Stack Overflow的问题. .net中引用类型内的值类型的内存分配

我的理解是,所有值类型无论它们在何处声明都会进入堆栈.现在这看起来错了.在下面的代码中,i将继续堆; 根据链接不在堆栈上.这是因为MyClass引用类型将转移到堆及其所有值类型.

class MyClass()
{
    int i = 5;
}
Run Code Online (Sandbox Code Playgroud)

好的,所以只有那些不属于类的值类型才能堆栈内存.对?但是,几乎所有像C#这样的Dot Net语言都在课堂上.那究竟什么去堆栈内存?

这个答案解释了什么值类型去堆.

如果是这种情况,堆栈内存上几乎没有甚至几乎没有任何东西.

我怀疑我误会了什么.

如果几乎所有数据都进入堆内存,我不理解堆栈内存的重要性/作用.

请解释.


以下两篇文章以简单的方式解释了很多内存管理.

https://blogs.msdn.microsoft.com/ericlippert/2009/04/27/the-stack-is-an-implementation-detail-part-one/

https://blogs.msdn.microsoft.com/ericlippert/2009/05/04/the-stack-is-an-implementation-detail-part-two/

.net c# garbage-collection memory-management

-1
推荐指数
1
解决办法
358
查看次数

标签 统计

.net ×2

memory-management ×2

c# ×1

garbage-collection ×1