メモリマップトIO
メモリマップトファイルとはメモリ空間の一部のように直接読み書きできるファイルのことをいいます。
ファイルをマッピングする利点は次の点です。
- 高速にアクセスできる
- メモリを書き換えるだけでファイルの内容を更新可能
- 大容量のファイルでも使用メモリ量が少ない
ファイルへのメモリマップトIOはOSごとに方法が異なるのですが、Qtを使えばプラットフォームの違いを吸収してメモリをマッピングできます。
手順
マッピングにはQFileDeviceのmap関数を使います。
その手順はおおまかには次の通りです。
- QFileでファイルを開く
- map関数でマッピング
- データ読み込み・書き出し
- アンマッピング
マッピングするときは必ずファイルを開きます。
もしマッピング中にQFileのデストラクタが呼ばれるか、同じオブジェクトで新しいファイルが開かれたときは自動的にアンマッピングされます。
コード例
例えば1バイト以上のファイルをマッピングして1文字目を書き換えるコードはこうなります。
QFile file("ファイルパス"); file.open(QFile::ReadWrite); uchar * memory = file.map(0, file.size()); ///マッピング memory[0] = 'A'; ///1文字目を書き換え file.unmap(memory); ///アンマッピング file.close();
map関数はもしマッピングに成功したらファイルのメモリ空間をuchar型の配列として返してきます。
それを介してファイルの読み込み、書き込みが可能です。
以上、QFileを使ったファイルのマッピング方法でした。では、また!
関連項目
© Kaz