VirtualAlloc函数原型为
LPVOID VirtualAlloc(
LPVOID lpAddress, // region to reserve or commit
SIZE_T dwSize, // size of region
DWORD flAllocationType, // type of allocation
DWORD flProtect // type of access protection);
用于虚拟内存操作。是三种内存操作机制之一(其他两种分别人堆 和内存映射文件)。VirtualAlloc函数有两种用途第一种是在虚拟内存中预订区域,在用作这个的时候 第三个参数为MEM_RESERVE,如果想要从虚拟地址高处开始预订以防止内存碎片的话还要与上MEM_TOP_DOWN,此时注意,第一个参数要为NULL.
如果要为第一个参数指定开始地址,需要注意的是一定的起始一定要为颗粒的正数倍(64KB) 还需要注意 预订的大小要为页面大小的正数倍。当然你也可以不用严格按照这样来。系统会为你做的,他的做法是当你不是64 的倍数时开始地址会往下走到达64的倍数,当大小不是2的倍数的时候系统会扩充到4的整倍数。
这个函数的第二中功能是 为预订好的虚拟内存中也交换文件中分配物理存储器。此时第三个参数要为MEM_COMMIT,为了是CPU达到好的效率第四个参数,最好设成跟预订时一样的,当然不一样也没关系。
注意我们可以在预订的虚拟内存中部分调拨内存。这个时候开始地址和大小多要为页面大小的整倍数。不是也没关系,系统会帮你做的。原理跟上面一样。