2012-03-20 76 views
0

我一直有这个问题,其中(RAM/HARD DISK /其他(?))是堆的位置?JIT创建的堆在哪里(C#)

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

此外,这个“堆栈”位于物理位置?内存 ?

实际执行团队中的某人可以让我们知道吗?因为大多数人说的是它的RAM。但我想真的知道在哪里和如何两个? 如果在这里很难回答,请分享一些好文章。

+0

不需要执行任务。堆和栈是标准的东西,初学者低级别检测报告者必须知道的 - 那就是初学者从事低级汇编程序编程。 – TomTom 2012-03-20 12:08:52

回答

0

当您运行.NET EXE文件时,它会加载将承载CLR的MSCorEE.dll。 CLR将在进程内存中创建堆栈和堆。如果需要的话,它会寻求更多的内存。

虽然操作系统会将它从您的内容中抽象出来(例如它可能位于交换文件中),它们将位于RAM中。

+0

这个进程内存在哪里?在RAM中 – Dhananjay 2012-03-20 12:08:10

+0

..... – Aliostad 2012-03-20 12:09:16

+0

在内存中。你还认为哪里?尽管使用虚拟管理器,操作系统可能会决定将其移动到硬盘中进入交换文件。 – TomTom 2012-03-20 12:09:36

0

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

你正在谈论的回忆在RAM.NET managed assemblies。对于其他人,由于该可能内存交换,通过操​​作系统本身在低RAM内存条件提出,可能 partialy完成对磁盘空间。

2

我会建议你阅读下面的文章:

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

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