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等)|堆|内存映射段(如文件映射)|栈|内核保留段|
堆栈等只是虚拟内存的一部分