据我了解,MEM_RESERVE实际上是“免费”内存,即可供我的进程使用,但尚未分配?或者之前已分配,但此后已被释放?
具体来说,请参阅我的!地址输出下面的我几乎没有虚拟地址空间(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比他们需要的更多,阻止其他人甚至能够分配?
答案 0 :(得分:9)
MEM_RESERVE由进程分配。即地址空间被认为正在使用中。但是,它尚未兑现。要实际使用内存进行存储,必须提交它。 Mark Russinovich有an excellent post,描述了所有细节。来自帖子
Testlimit的-r开关有保留 虚拟内存,但实际上并非如此 提交它。保留的虚拟内存 实际上不能存储数据或代码,但是 应用程序有时会使用 预订创造一大块 虚拟内存,然后将其提交为 需要确保承诺 内存在地址中是连续的 空间。当进程提交某个区域时 虚拟内存,操作 系统保证它可以维护 进程存储在的所有数据 内存或物理内存或内存 磁盘。这意味着一个过程可以 遇到另一个限制: 提交限制。