书上说:
BOOL VirtualFree(LPVOID lpvAddress, DWORD dwSize,DWORD dwFreeType);
该函数用来回收或者释放分配的虚拟内存。
如果是回收,参数2可以指向虚拟地址范围内的任何地方,
如果是释放,参数2必须是VirtualAlloc返回的地址;请问:
回收和释放,有什么区别?

解决方案 »

  1.   

    这个与Windows的虚拟内存机制有关:
    内存与进程的虚拟地址有一个映射表,简单的说,用户先在地址空间中找出满足大小的连续地址空间,这是第一次调用VirtualAlloc,返回地址空间的首地址。这个地址空间暂时是不能访问的,因为还没有分配内存,后续的调用VirtualAlloc,就是为一小段地址空间分配内存,此时就可以访问对应地址了。
    你所说的回收,是指系统将内存回收,
    你所说的释放,就是将整个虚拟地址空间释放。