首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

CreateFileMapping()在内存中映射,是指开辟一段同大小的空间吗?解决方法

2012-03-13 
CreateFileMapping()在内存中映射,是指开辟一段同大小的空间吗? - C++ Builder / Windows SDK/API1、比如文

CreateFileMapping()在内存中映射,是指开辟一段同大小的空间吗? - C++ Builder / Windows SDK/API
1、比如文件有3G, HANDLE hFirstMapping = CreateFileMapping(hFirst, NULL, PAGE_READONLY, 0, 0, NULL);是开辟3G的内存?怎么回事?如果把第4,5的参数改成4G,那又怎么回事?

如果解释不清楚,麻烦给个连接或则GOOGLE关键字。“windows内存管理”的范围貌似有点大。

2、如果文件大小不过64k(小于文件分配粒度),MapViewOfFile()这个必须开辟64k的倍数。开辟了会出问题吗?

[解决办法]
http://dev.csdn.net/article/83/83908.shtm
[解决办法]
函数CreateFileMapping()第四个参数指定了创建的文件映射对象的字节大小,该参数类型为DWORD,也就是说文件映射对象的尺寸最大为2147483648字节,即2G。 

文件大小确实与和虚拟内存有关,毕竟是需要在进程内部开辟与文件大小相同的内存空间的。 

如果要大于2G的文件,那么不能使用文件映射对象的方法,可以使用简单的复制文件方法,如从源文件依次读取N个字节,并依次写入目的文件。
[解决办法]

热点排行