Memory MEM_保留和MEM_提交状态之间的确切区别是什么?
据我所知,MEM_RESERVE实际上是“空闲”内存,即可供我的进程使用,但还没有分配?或者它以前是分配的,但后来被释放了 具体来说,请参见我的!下面的地址输出说明我几乎没有虚拟地址空间(99900 KB可用,2307872为MEM_PRIVATE。但各州显示其中44.75%实际上是MEM_RESERVE。这是否意味着在我的过程中它实际上是免费的…但可能是碎片化的Memory MEM_保留和MEM_提交状态之间的确切区别是什么?,memory,winapi,memory-management,windbg,Memory,Winapi,Memory Management,Windbg,据我所知,MEM_RESERVE实际上是“空闲”内存,即可供我的进程使用,但还没有分配?或者它以前是分配的,但后来被释放了 具体来说,请参见我的!下面的地址输出说明我几乎没有虚拟地址空间(99900 KB可用,2307872为MEM_PRIVATE。但各州显示其中44.75%实际上是MEM_RESERVE。这是否意味着在我的过程中它实际上是免费的…但可能是碎片化的 0:000> !address -summary --------- PEB a8bd8000 not found ----
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)
0:000>!地址-摘要
---------未找到PEB a8bd8000----
--------------------使用摘要--------------------------
TotSize(KB)Pct(Tots)Pct(忙碌)使用率
259af000(616124):22.29%23.12%:地区智囊团
618f000(99900):03.61%00.00%:区域免费
13e22000(325768):11.78%12.22%:区域性图像
42c04000(1093648):39.56%41.04%:区域堆栈
42d000(4276):00.15%00.16%:地区智囊团
2625d000(625012):22.61%23.45%:区域范围
0(0):00.00%00.00%:RegionSagePageHeap
0(0):00.00%00.00%:RegionSagePEB
1000(4):00.00%00.00%:RegionSageProcessParameters
1000(4):00.00%00.00%:RegionSageEnvironmentBlock
Tot:a8bf0000(2764736 KB)忙:a2a61000(2664836 KB)
--------------------类型摘要--------------------------
TotSize(KB)Pct(Tots)使用量
618f000(99900):03.61%:
13e22000(325768):11.78%:MEM_图像
1e77000(31196):01.13%:内存映射
8cdc8000(2307872):83.48%:MEM_PRIVATE
--------------------状态摘要--------------------------
TotSize(KB)Pct(Tots)使用量
5723500(1427668):51.64%:MEM_COMMIT
618f000(99900):03.61%:无记忆
4b82c000(1237168):44.75%:成员储备
最大自由区域:基本7e4a1000-大小000ff000(1020 KB)
后续行动:
因此,在我的例子中,这个进程报告“内存不足”,但实际上它可以进行分配,但有人保留的内存超过了当时的需要,阻止了其他人进行分配?MEM\u RESERVE是由进程分配的。也就是说,地址空间被认为正在使用。但是,它没有被使用n已提交。要实际使用内存进行存储,必须提交。Mark Russinovich已提交,这描述了所有细节。来自帖子 Testlimit的–r开关具有备用功能 虚拟内存,但实际上不是 提交它。保留虚拟内存 无法实际存储数据或代码,但 应用程序有时使用 保留以创建一个大的 虚拟内存,然后将其作为 需要确保 内存在地址中是连续的 当进程提交一个区域时 对于虚拟内存,操作系统 系统保证它可以维护 进程存储在中的所有数据 物理内存中的内存或打开的内存 这意味着一个进程可以 遇到另一个极限:价格 提交限制
所以在我的例子中,这个进程报告“内存不足”,但实际上它可以进行分配,但有人保留的内存超过了他们当时的需要,阻止了其他人进行分配?内存保留是每个进程的,所以进程保留的内存不是其他人(如在另一个进程中).当然可以,但关键是,这个进程报告分配失败,所以问题是某个人(这个进程中的某个子系统)MEM_保留了更多的内存,并且阻止了其他子系统进行分配?对不起,我被“某人”搞糊涂了部分。无论如何,这很难说。作为代码保留内存的一部分,我假设它最终将需要该内存来完成某些事情。如果没有进一步的细节,就很难找出问题的根源。线程保留堆栈空间,但只在需要时提交(除非您在.NET上,在这种情况下,它们会提前提交)。清除1000个线程中的一些可能是个好主意:)