JIT创建的堆在哪里(C#)

时间:2012-03-20 12:01:48

标签: c# stack heap jit

我总是有这个问题,哪个(RAM / HARD DISK /其他(?))是Heap所在的位置?

如果我通过内存中的代码加载2 GB文件,那么它会去哪里?

这个“堆叠”位于物理位置的哪个位置?内存 ?

来自实际实施团队的人可以告诉我们这个吗?因为大多数人说的是它的RAM。但我真的想知道两者在哪里以及如何? 如果在这里难以回答,请分享一些好文章。

4 个答案:

答案 0 :(得分:2)

我建议阅读以下文章:

http://blogs.technet.com/b/markrussinovich/archive/2008/11/17/3155406.aspx

.NET堆只是应用程序用户地址空间的一部分。因此,它(以及其中分配的所有对象)当前是在RAM还是在磁盘上取决于整个系统的当前内存压力和VMM的决策。堆的一部分也可以同时存储在RAM和磁盘上的其他部分中。

答案 1 :(得分:2)

What and where are the stack-and-heap

这个问题及其答案非常详细地解释了它。它涵盖了堆栈和堆。如何使用它,差异等。它也有漂亮的图形!

答案 2 :(得分:0)

当您运行.NET exe时,它会加载将托管CLR的MSCorEE.dll。 CLR将在进程内存中创建堆栈和堆。如果需要,它会考虑为进程寻求更多内存。

它们将位于RAM中,尽管操作系统会将其抽象出来(例如,它可能位于交换文件中)。

答案 3 :(得分:0)

如果加载.NET进程的2GB文件内存,它将在32位系统上崩溃,因为框架大约在32位系统上保持1.2GB

您正在谈论的记忆在.NET managed assemblies RAM 中。对于其他人,由于可能内存交换,由操作系统本身在低 RAM 内存条件下进行,可以磁盘上部分完成空间。