某些虚地址状态是MEM_FREE,而且足够大,但是对那里VirtualAlloc一个很小的内存,却返回错误,LastError + 487请问大概是什么原因?

解决方案 »

  1.   

    MSDN中的VirtualAlloc函数中没有出现MEM_FREE,而且这个标志只是表明内存的状态.
    MSDN对MEM_FREE的解释是:
    指定了空闲页面对于调用进程不可进入,也不可分配的。你去看看MEMORY_BASIC_INFORMATION结构中的state成员,当它为MEM_FREE时,其它的成员AllocationBase,AllocationProtect,Protect都是未定义的。这说明了内存状态为MEM_FREE的区域是不能分配的。
      

  2.   

    当然是VirtualQuery的到地址state为MEM_FREE 
    MEM_FREE 可以保留吧,或MEM_RESERVE | MEM_COMMIT
      

  3.   


    VirtualQuery(pTry,&mbi,sizeof(mbi));
    pTry =(PBYTE) mbi.BaseAddress;
    if (mbi.State==MEM_FREE)
    m_pSpring = (LPBYTE)VirtualAlloc(pTry,1024,MEM_RESERVE | MEM_COMMIT,PAGE_EXECUTE_READWRITE);