我有一个文件有6个多G的大小,我写了个程序想读出并写入另一个文件中,读文件时我采用了内存映射的方法。每次映射100M的数据,
我的环境是:winxp, QT Creator1.3.83, Qt4.7.0(32bit)
当i = 21时,也就是map位移大于2G的时候,内存映射返回的指针为空,映射失败,
我调试了一下,每次映射时返回指针的地址都是变化的,到这个时候,就好像是个临界状态,返回就为空了,
也就是下面程序的这一句 m_pMemMaptr = m_File.map( i * 104857600, 104857600); 返回值 m_pMemMaptr为空
这种情况应该如何解决呀,利用内存映射应该是可以解决读大于4G的文件的呀?是不是我哪里理解错了,拜托各位帮忙解答一下,谢谢!
关键代码:
for(int i = 0; i < nBlokNum; i++)
{
int nFlag = m_File.unmap(m_pMemMaptr); // 释放
if (nFlag = 0)
{
int sss = 0;
}
m_pMemMaptr = m_File.map( i * 104857600, 104857600); // 映射
if(m_pMemMaptr == NULL)
{
int sss = 0;
}
// 读
// 写
}