採用qt4.5.0記憶體對映檔案技術複製乙個檔案。速度要比使用io讀寫快一倍以上。
bool copydataqt4::copyfilemap()
qfile objoutputfile(m_stroutputfile);
if (!objoutputfile.open(qiodevice::unbuffered | qiodevice::readwrite | qiodevice::truncate))
uchar * pinputdata;
uchar * poutputdata;
m_qint64fileoffset = 0;
m_qint64inputfilesize = objinputfile.size();
objoutputfile.resize(m_qint64inputfilesize);
int untmpblocksize = 0;
while(m_qint64fileoffset < m_qint64inputfilesize)
else
pinputdata = objinputfile.map(m_qint64fileoffset,untmpblocksize);
if (pinputdata == null)
poutputdata = objoutputfile.map(m_qint64fileoffset,untmpblocksize);
if (poutputdata == null)
memcpy(poutputdata,pinputdata,untmpblocksize);
m_qint64fileoffset += untmpblocksize;
objinputfile.unmap(pinputdata);
objoutputfile.unmap(poutputdata);
} objinputfile.close();
objoutputfile.close();
return true;
}
使用記憶體對映檔案處理大檔案示例
前面我們講過記憶體對映檔案的使用,但是,如果檔案大小超過記憶體大小那怎麼辦呢 其實,我們在把記憶體對映檔案對映到程序的位址空間時,可以對映一部分,通過乙個迴圈,把整個檔案處理完 下面我舉個例子 include include include using namespace std int64 cou...
linux記憶體對映示例
一 記憶體對映介紹 linux對外設的一般操作,使用者空間不能直接對外設訪問,而是通過核心空間間接訪問,如下圖訪問磁碟 二 linux記憶體對映函式 mmap對映函式 功能 將乙個檔案或者其它物件對映進記憶體。檔案被對映到多個頁上,如果檔案的大小不是所有頁的大小之和,最後乙個頁不被使用的空間將會清零...
qt的記憶體對映
uchar qfiledevice map qint64 offset,qint64 size,qfiledevice memorymapflags flags nooptions 從偏移量開始將檔案的大小位元組對映到記憶體中。應該開啟乙個檔案以使對映成功,換句話說就是對映必須開啟乙個檔案,但在對映...