多线程MapViewOfFile大文件,分段映射能否重叠?
思路是这样的,主线程创建一个FileMap,因为文件很大想用MapViewOfFile分段映射得到多段指针,供各个线程使用。因为看到有帖子说MapViewOfFile不能多线程同时调用,所以把MapViewOfFile放到临界区中。现在的问题是好像MapViewOfFile的偏移地址必须是64KB的整数倍,那么多段之间能不能重叠?比如第一段是0-127K,第二段是63-255K。我通过VC单线程实验的结果是多次有重叠的MapViewOfFile是分配不重叠的内存。那么在多线程当中对这些内存内容修改后映射回文件的顺序会不会影响文件内容。求解。。。
[解决办法]
1. 映射的内存地址是以粒度为单位的,即64K(0x10000),所以你看到返回的地址后4个数据都是0.如0x01230000
2. 内存的尺寸是以页为单位的,一般是4K(0x1000),
3. MapViewOfFile可以映射相同的数据(重叠),修改这部分数据,就如修改一个全局变量一样。
结论:有影响
[解决办法]
你去看一下什么是虚拟内存