• 7374阅读
  • 4回复

请教内存映射的问题!盼答案 [复制链接]

上一主题 下一主题
离线hymit
 
只看楼主 倒序阅读 楼主  发表于: 2010-08-12
— 本帖被 XChinux 执行加亮操作(2010-09-02) —
我有一个文件有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;
    }

       // 读

      // 写

}


离线hymit
只看该作者 1楼 发表于: 2010-08-14
帖子沉得太快了,继续盼解答,谢谢!
离线sbtree
只看该作者 2楼 发表于: 2010-08-16
也想知道答案,帮顶
windows 7 + VC++2008 + Qt4.5.2
离线mikejoy
只看该作者 3楼 发表于: 2010-08-23
帮顶下  不过 你的帖子得拿放小镜看哦  
离线daily8321

只看该作者 4楼 发表于: 2018-10-25
if (nFlag = 0)
快速回复
限100 字节
 
上一个 下一个