Windows核心编程里面说,共享内存被映射到高地址,例如32位程序的地址空间,程序自己用的是0-2G虚拟地址,2G-4G是留给共享内存和共享dll使用的地址空间。但是我写了个小程序测试了一下#include "stdafx.h"
#include<windows.h>
int main(void){
  HANDLE hFileMapping = CreateFileMapping( INVALID_HANDLE_VALUE,
                           NULL, PAGE_READWRITE, 0, 1024, "myshare" );
  LPVOID pvMapped = MapViewOfFile( hFileMapping, FILE_MAP_WRITE, 0, 0, 0 );
  LPTSTR pStr = static_cast<LPTSTR>( pvMapped );
  pStr[0]='a';
  pStr[1]='b';
  getchar();
  UnmapViewOfFile( pvMapped );
  CloseHandle( hFileMapping );
  return 0;
}发现pvMapped的值是0x00370000,我用的vc2005。大虾给个解释吧!

解决方案 »

  1.   

    程序自己用的是0-2G虚拟地址,2G-4G是留给共享内存和共享dll使用的地址空间
    这句话不对,共享内存和共享dll也可以在0-2G,MapViewOfFile得到的永远都在0-2G
      

  2.   

    我不记得windows核心编程里面有这样的文字,楼主可能理解错了
      

  3.   

    0-2G是用户态程序可使用的空间,2-4G是内核使用的空间。也就是说ring3级的程序以及DLL等都是在0-2G的空间的
      

  4.   

    不错,能写程序观察下。我一直想看Windows核心编程,买不到英文版,就搁下了。