質問: メモリマップドファイルを可変長メモリプールとして だいぶ製作中のアプリケーションも、自作ファイル形式も かなり大きい(よほどの場合により数百mbとか)ファイルを扱う可能性が生じてきたので 必ず全部メモリに読み込むのは推奨できない、という状況になりました。 そこで 既存のファイルからは読み取り専用で メモリマップドファイルとして開き、普通のメモリ上に読み込まずともポインタ操作できるようにし 操作したい場合は読み書きできるメモリマップドファイルを、自分のアプリの指定フォルダに作業領域として作ったところから使用中だと判断出来るようにしておいて確保し アドレスはオフセット等で管理し、ポインタを移し替えたりする、という手を使い また、うまく処理を切り分けてやることにより 重要な個所についてはメモリ上に確保し、そこにデータにフィルタ演算するついでに移し替えたりするなど さまざまな手によって かなりの速度も実現出来ることが確認できました。 これはつまり、メモリではなくメモリマップドファイルを 可変長メモリプールとして使うという形になっています。 ただ、昨日思いつきで作って、とりあえず十分快適に動作は出来るけども、最適解かどうかは手探り状態、ともいえるので よりよい方法が考えらるならぜひ知っておきたいです。 と...書いてる途中で 今は「使用中」「未使用」のフラグとそのサイズを持たせたリストを、一方向にnextポインタでつなぐのみ、となっていますが 空きリストのみ(も?)収集して...という方法の概念を思い出しました。 あまり複雑になるとバグが出る危険性はありますが、試す価値はありそうです。 ただ ・まず、メモリマップドファイル自体については、作った後はそのファイル自体は固定サイズ、ってことで良いでしょうか? ・可変長メモリプールなどのアルゴリズムについて、把握するのに何日もかかりそうなあまり巨大なコードになりすぎない範囲で、考察したりオープンソースで作ったりしているサイトなどがあれば教えていただきたいです。
回答: メモリマップドファイルは標準には含まれない (はず) なので, その実装などは使っているシステムに依存すると思います. 例えば, windows なのか freebsd なのか linux なのかによって違うかもしれませんよ.