文件映射里一个MapViewOfFile 函数里最后面两个参数都要求是分配粒度的整数倍,这是个什么概念,为什么要这样?做共享内存好像不需要一定为整数倍吧?

解决方案 »

  1.   

    一个是要求文件偏移位置,即从何位置开始Map,后一个参数要求Map多少byte;
      

  2.   

    每当你保留地址空间的一个区域时,系统要确保该区域从一个分配粒度的边界开始。对于不同的C P U平台来说,分配粒度是各不相同的。但是,截止到撰写本书时,所有的C P U平台(x 8 6、3 2位A l p h a、6 4位A l p h a和I A - 6 4)都使用6 4 K B这个相同的分配粒度。当你保留地址空间的一个区域时,系统还要确保该区域的大小是系统的页面大小的倍数。页面是系统在管理内存时使用的一个内存单位。与分配粒度一样,不同的C P U,其页面大小也是不同的。x 8 6使用的页面大小是4 KB,而A l p h a(当既能运行3 2位Windows 2000也能运行6 4位Windows 2000时)使用的页面大小则是8 KB。在撰写本书时, M i c r o s o f t预计I A - 6 4也使用8K B的页面。但是,如果测试显示使用更大的页面能够提高系统的总体性能,那么M i c r o s o f t可以切换到更大的页面(1 6 K B或更大)。详见《windows核心编程》第13章