这两个"可以移动","不可以移动",到底是个什么概念.1.为什么HeapAlloc的内存就不能移动呢?
2.可以移动有什么作用? 是在进程的地址空间当中可以移动? 还是操作系统管理的,内存的绝对地址空间当中可以移动? 
3.这个移动是某种"分配了,但是还没有提交"的内存么? 一旦有写操作就提交?高人帮忙解释一下哈!

解决方案 »

  1.   

    以前16位windows下,为了节省内存,操作系统是把用户分配的内存四处移动的,这时候只能用句柄而不是分配的地址来访问内存。GlobalLock 告诉操作系统暂时不要移动分配的内存,让用户可以用地址来访问分配的内存。用户不再需要用地址来访问分配的内存时应该用GlobaUnlock解除对内存的锁定。GlobalAlloc和GlobalLock不能够用new来代替,因为在32位windows中地址只在一个进程中有效,跨进程传递内存句柄的应用程序(例如剪贴板)只能使用内存句柄。-------------------
    Win32函数
    ---------------------------------------------------------------缓冲处理:
    memcpy  --> CopyMemory
    memmove --> MoveMemory
    memset  --> FillMemory, ZeroMemory字符分类:
    isalnum -> IsCharAlphaNumeric
    isalpha -> IsCharAlpha, GetStringTypeW (Unicode)
    islower -> IsCharLower, GetStringTypeW (Unicode)
    tolower -> CharLower
    toupper -> CharUpper流处理:
    sprintf  -> wsprintf
    vsprintf -> wvsprintf串处理:
    strcat, wcscat   -> lstrcat
    strcmp, wcscmp   -> lstrcmp
    strcpy, wcscpy   -> lstrcpy
    _strupr, _wcsupr -> CharUpper, CharUpperBuffer文件处理:
    fopen  -> CreateFile
    fwrite/fread  ->  WriteFile/ReadFile
    fclose  -> CloseHandle堆处理:
    new/delete  -> GlobalAlloc/GlobalFree