读书人

VirtualAlloc失去的内存块,会不会被he

发布时间: 2012-08-07 14:54:49 作者: rapoo

VirtualAlloc得到的内存块,会不会被heap或者stack覆盖掉?
x86体系结构的虚拟内存空间从低到高是这样排列的。

---------------------------------------------
| .text | .data | heap....| other region for VirtualAlloc | stack |
---------------------------------------------

我的问题是,既然VirtualAlloc是在中间拿掉了一段内存空间,那么如果进程使用了大量的堆内存,那么随着堆的增长,这个堆会不会覆盖掉VirtualAlloc申请的地址段?

windows平台下堆内存管理最后是调用HeapAlloc,他调用ntdll.dll里面的内存管理函数,并非通过VirtualAlloc来调用的。会发生冲突吗?

[解决办法]
不会,LZ为什么会担心这种问题?

HeapAlloc和VirtualAlloc都会调用ntdll.NtAllocateVirtualMemory

进程内存空间分布应是这样
|保留段|PE区段(.text、.data、.rsrc等)|堆|内存映射段(如文件映射)|栈|内核保留段|

堆栈等只是虚拟内存的一部分

读书人网 >VC/MFC

热点推荐