2010-03-30 1239 views
11

据我了解,MEM_RESERVE实际上是'自由'的内存,即可供我的进程使用,但尚未分配?或者它曾经被分配过,但之后被释放了?MEM_RESERVE和MEM_COMMIT状态之间的确切区别是什么?

具体来说,看到我!地址输出下面如何,我几乎用尽虚拟地址空间(99900 KB免费,2307872为MEM_PRIVATE,但状态显示的是44.75%,实际上是MEM_RESERVE。这是否意味着它实际上是免费的,在我的过程...但也许零散

0:000> !address -summary 
--------- PEB a8bd8000 not found ---- 

-------------------- Usage SUMMARY -------------------------- 
    TotSize (  KB) Pct(Tots) Pct(Busy) Usage 
    259af000 ( 616124) : 22.29% 23.12% : RegionUsageIsVAD 
    618f000 ( 99900) : 03.61% 00.00% : RegionUsageFree 
    13e22000 ( 325768) : 11.78% 12.22% : RegionUsageImage 
    42c04000 (1093648) : 39.56% 41.04% : RegionUsageStack 
    42d000 ( 4276) : 00.15% 00.16% : RegionUsageTeb 
    2625d000 ( 625012) : 22.61% 23.45% : RegionUsageHeap 
      0 (  0) : 00.00% 00.00% : RegionUsagePageHeap 
      0 (  0) : 00.00% 00.00% : RegionUsagePeb 
     1000 (  4) : 00.00% 00.00% : RegionUsageProcessParametrs 
     1000 (  4) : 00.00% 00.00% : RegionUsageEnvironmentBlock 
     Tot: a8bf0000 (2764736 KB) Busy: a2a61000 (2664836 KB) 

-------------------- Type SUMMARY -------------------------- 
    TotSize (  KB) Pct(Tots) Usage 
    618f000 ( 99900) : 03.61% : <free> 
    13e22000 ( 325768) : 11.78% : MEM_IMAGE 
    1e77000 ( 31196) : 01.13% : MEM_MAPPED 
    8cdc8000 (2307872) : 83.48% : MEM_PRIVATE 

-------------------- State SUMMARY -------------------------- 
    TotSize (  KB) Pct(Tots) Usage 
    57235000 (1427668) : 51.64% : MEM_COMMIT 
    618f000 ( 99900) : 03.61% : MEM_FREE 
    4b82c000 (1237168) : 44.75% : MEM_RESERVE 

Largest free region: Base 7e4a1000 - Size 000ff000 (1020 KB) 

跟进:

所以在我的例子而言,这个过程报告“内存不足”,但实际上它可以使分配,但有人MEM_RESERVED比他们需要的更多,从而防止其他人能够分配?

回答

7

MEM_RESERVE由进程分配。即地址空间被认为正在使用中。但是,它没有被承诺。要实际使用内存进行存储,它必须提交。 Mark Russinovich有an excellent post,描述了所有的细节。从后

Testlimit的-r开关有它保留 虚拟内存,但实际上没有 提交。保留的虚拟存储器 不能实际存储的数据或代码,但 应用程序有时使用 保留创建的 虚拟存储器大块,然后提交它根据需要,以确保该 承诺 存储器是在地址 连续空间。当进程提交虚拟内存的区域 时,操作系统保证它可以将物理内存或 磁盘上进程存储在内存中的所有数据保留 。这意味着一个进程可以在 上运行另一个限制: 提交限制。

+0

所以在我的例子而言,这个过程报告“内存不足”,但实际上它可以使分配,但有人MEM_RESERVED比他们更需要在这一点上,防止别人从甚至能够分配? – pj4533 2010-03-30 15:16:14

+0

MEM_RESERVED是每个进程,所以进程保留该内存不是其他人(如在另一个进程中)。 – 2010-03-30 15:20:12

+0

当然,但是问题是,这个过程报告分配失败,所以问题是有人(这个进程中的某个子系统)MEM_RESERVED有更多的内存,并且它阻止了其他子系统进行分配? – pj4533 2010-03-30 15:22:30

相关问题