1
3
仅供参考,您可以使用GetProcessMemoryInfo和GlobalMemoryStatusEx来获取一些内存使用度量。
|
2
2
通过使用reserve参数进行VirtualAlloc调用,可以使用零(实际上是零)内存。这只会在进程中保留地址空间。在使用VirtualAlloc和commit参数实际返回带有页的地址之前,不会使用内存。 这本质上就是虚拟字节(占用的地址空间量)和私有字节(提交的内存量)之间的区别。 您对VirtualAlloc()的两种使用都将保留相同的内存量,因此从资源消耗的角度来看,它们是等效的。 his blog . 他写了几篇文章叫做《突破极限》,其中包括了其中的一些内容。如果你想了解真正的细节,那么你应该读他的书( Microsoft Windows Internals ). 这是迄今为止我读过的关于windows如何管理内存(以及其他一切)的最好的参考资料。 (编辑)附加信息: 将virtual alloc与reserve参数一起使用时,将创建页目录条目(32位),并创建页表条目(32位)。此时,不会为保留内存创建页。 查看此信息的最佳方法是使用内核调试器。我建议使用LiveKD(sysinternals)。您可以使用liveKD而无需连接远程计算机,但它不允许实时调试。加载LiveKD,并选择您的进程。那你就可以跑了!PTE命令检查进程的页表。 同样,我建议你阅读Windows内部的内容。在我的版本(第四版)中,有一章(超过100页)介绍了所有这些内容,并举例说明了如何遍历liveKD中的各种数据结构。 |
3
0
不过:使用VirtualFree你可以有选择地 退役 单个页面或页面范围。对于已取消提交的页,虚拟地址范围(在进程内)仍保留,但没有为其分配物理内存(RAM或交换文件)。稍后可以使用VirtualAlloc再次提交这些页面。 因此,除非需要为进程中的其他分配器释放地址空间,否则可以使用此机制有选择地请求内存并将内存返回给操作系统。 [编辑]
测量
地址空间碎片警告 -小心你的返回算法。当以“谁是自由的”方式将各个页面返回到进程时,您可能会得到一个碎片地址空间,该空间有80%的可用内存,但没有100K的可用内存。 |
4
0
您可以尝试使用“perfmon”并添加计数器(例如内存)来开始了解VirtualAlloc正在使用哪些资源。您必须在调用VirtualAlloc之前和之后拍摄快照 http://windbg.info/doc/1-common-cmds.html#20_memory_heap 想知道到底发生了什么。 |
vini · 安装wfp内核驱动程序后,devcon状态返回39 2 年前 |
I101I · 如何镜像HBITMAP 2 年前 |
E235 · 如何查看谁创建了Windows NamedPipe 2 年前 |
Pizza Ãcke · 创建带有内存映像的Windows托盘图标 2 年前 |
Jabu · 如何获取列表框滚动条“拇指”的高度? 2 年前 |
tree1234 · 对可执行文件进行代码设计,并允许修改某些字节 2 年前 |
Penachia · PDF FontDescriptor标志 6 年前 |