![]() |
1
3
您的报告最有可能是由进程堆引起的。在Windows中,内存分配有两部分。第一部分是应用程序中用于访问内存的连续地址空间。在不运行/3GB交换机的32位系统上,所有分配都必须来自较低的2 GB用户地址空间。内存分配的第二部分是分配的实际内存。这可以是RAM,也可以是硬盘上页面文件系统的一部分。操作系统在后台处理RAM和页面文件系统之间的移动分配。 很可能您的应用程序正在使用Windows堆处理所有内存分配。创建堆时,会为它将分配的内存保留1 MB的地址空间。在它实际需要与这个地址空间相关联的内存之前,实际上没有使用物理内存。如果堆需要的内存超过1 MB,则使用加倍算法来保留更多的地址空间,然后在需要时提交物理内存。需要注意的重要一点是,一旦堆保留了地址空间,它就永远不会释放它。 就我个人而言,当我试图理解记忆管理时,我发现以下书籍和章节很有用。 高级Windows调试-第6章这本书对我看到的堆进行了最详细的研究。 Windows内部-第7章本书添加了一些在高级Windows调试中找不到的信息;但是,它并没有给出一个很好的概述。 |
![]() |
2
0
在我看来,垃圾收集器只有在内存压力达到1/3(3 GB中有1 GB)时才会启动。 至于vb-别担心!它是虚拟的!说实话,什么都没有分配,什么也没有承诺。关注你的私人字节-你真正的分配。 |
![]() |
3
0
有“虚拟内存”这样的东西。这是计算机科学中一个相当非操作系统特定的概念。微软也有 written 关于Windows实现的事情。 长话短说,在Windows中,您可以请求在不实际分配任何物理内存的情况下保留一些内存。这就像是为将来的使用保留一些内存地址。当您真正需要内存时,您可以物理地分配它(又称“提交”)。 我不需要自己使用这个功能,所以我不知道它在现实生活中是如何使用的,但我知道它就在那里。我认为这个想法可能类似于保留指向某个内存地址的指针,并在需要时分配内存,而不必更改指针实际指向的内容。 |
![]() |
4
0
Windows以拥有各种类型的内存分配而臭名昭著,其中一些是其他类型的超集。您提到了私有字节和虚拟字节。私有字节,如您所知,是指专门分配给进程的内存。虚拟字节包括私有字节,以及任何共享内存、保留内存等。 尽管在现实生活中,您只需要关注私有字节,或者共享内存(无论如何,Windows处理其余的字节),但虚拟字节计数通常是用户(以及软件的评估者)看到的,并解释为进程的内存使用情况。 |
![]() |
5
0
一个好的和最新的关于这个主题的参考书是通过Jeffrey Richter的C/C++的Windows标题,你应该寻找第13章:“Windows内存体系结构”。 |
![]() |
S. Jacson · 任意两台发电机的速度差(内置功能) 2 年前 |
![]() |
Sadeq Dousti · 相当于“嵌套删除”的执行性能SQL查询 2 年前 |
![]() |
Prince · 复制大型文件需要更多时间 3 年前 |
![]() |
Sagar · 为什么在循环之外声明变量会更快? 3 年前 |
![]() |
seco · 如何在不挂起页面的情况下加载JS 3 年前 |