Memory MEM_保留和MEM_提交状态之间的确切区别是什么?

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 ----

据我所知,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)
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个线程中的一些可能是个好主意:)