- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
据我了解,MEM_RESERVE 实际上是“空闲”内存,即可供我的进程使用,但尚未分配?或者它以前被分配,但后来被释放了?
具体来说,在下面的 !address 输出中查看我几乎没有虚拟地址空间(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 超出了他们当时的需要,从而阻止其他人甚至无法分配?
最佳答案
MEM_RESERVE 由进程分配。 IE。地址空间被认为正在使用中。然而,它并没有被 promise 。要实际使用内存进行存储,它必须被提交。马克 Russinovich 拥有 an excellent post ,它描述了所有细节。来自帖子
Testlimit’s –r switch has it reserve virtual memory, but not actually commit it. Reserved virtual memory can’t actually store data or code, but applications sometimes use a reservation to create a large block of virtual memory and then commit it as needed to ensure that the committed memory is contiguous in the address space. When a process commits a region of virtual memory, the operating system guarantees that it can maintain all the data the process stores in the memory either in physical memory or on disk. That means that a process can run up against another limit: the commit limit.
关于memory - MEM_RESERVE 和 MEM_COMMIT 状态之间的确切区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2546283/
我对 VirtualAlloc 有点困惑, 我们可以使用 MEM_RESERVE 保留内存,然后使用 MEM_COMMIT 提交它,但我对以下两个函数使用时的区别有点困惑: m_pvData = Vi
我对 VirtualAlloc 有点困惑, 我们可以使用 MEM_RESERVE 保留内存,然后使用 MEM_COMMIT 提交它,但我对以下两个函数使用时的区别有点困惑: m_pvData = Vi
首先,让我说我很清楚如何VirtualAlloc()工作原理以及现代操作系统的虚拟内存设施通常如何工作。 表示,使用MAP_RESERVE VirtualAlloc() 的标志Windows API,
据我了解,MEM_RESERVE 实际上是“空闲”内存,即可供我的进程使用,但尚未分配?或者它以前被分配,但后来被释放了? 具体来说,在下面的 !address 输出中查看我几乎没有虚拟地址空间(99
首先,我非常清楚 VirtualAlloc() 是如何工作的:当我保留内存块时,我得到的地址对齐到 64K 边界,(这个值可以很容易地通过 GetSystemInfo()),然后当我提交页面时,我将它
以下对 VirtualAlloc() 的调用在 x64 上返回错误 ERROR_INVALID_PARAMETER: LPVOID lp = VirtualAlloc(NULL, 0x10000000
我是一名优秀的程序员,十分优秀!