
だいぶ製作中のアプリケーションも、自作ファイル形式も
かなり大きい(よほどの場合により数百MBとか)ファイルを扱う可能性が生じてきたので
必ず全部メモリに読み込むのは推奨できない、という状況になりました。
そこで
既存のファイルからは読み取り専用で
メモリマップドファイルとして開き、普通のメモリ上に読み込まずともポインタ操作できるようにし
操作したい場合は読み書きできるメモリマップドファイルを、自分のアプリの指定フォルダに作業領域として作ったところから使用中だと判断出来るようにしておいて確保し
アドレスはオフセット等で管理し、ポインタを移し替えたりする、という手を使い
また、うまく処理を切り分けてやることにより
重要な個所についてはメモリ上に確保し、そこにデータにフィルタ演算するついでに移し替えたりするなど
さまざまな手によって
かなりの速度も実現出来ることが確認できました。
これはつまり、メモリではなくメモリマップドファイルを
可変長メモリプールとして使うという形になっています。
ただ、昨日思いつきで作って、とりあえず十分快適に動作は出来るけども、最適解かどうかは手探り状態、ともいえるので
よりよい方法が考えらるならぜひ知っておきたいです。
と…書いてる途中で
今は「使用中」「未使用」のフラグとそのサイズを持たせたリストを、一方向にnextポインタでつなぐのみ、となっていますが
空きリストのみ(も?)収集して…という方法の概念を思い出しました。
あまり複雑になるとバグが出る危険性はありますが、試す価値はありそうです。
ただ
・まず、メモリマップドファイル自体については、作った後はそのファイル自体は固定サイズ、ってことで良いでしょうか?
・可変長メモリプールなどのアルゴリズムについて、把握するのに何日もかかりそうなあまり巨大なコードになりすぎない範囲で、考察したりオープンソースで作ったりしているサイトなどがあれば教えていただきたいです。
No.1ベストアンサー
- 回答日時:
メモリマップドファイルは標準には含まれない (はず) なので, その実装などは使っているシステムに依存すると思います. 例えば,
Windows なのか FreeBSD なのか Linux なのかによって違うかもしれませんよ.この回答への補足
(12/27)
久しぶりに見てみたら
メモリマップドファイルではなくメモリ上での可変長プールで、単独での解放手順がないバージョンはEfficient C++に載っていました。
やはり単独での解放手順があるのとないのとでは結構必要事項の量が変わってきますが
(その他の色々なサイトなども含め)少なくとも、現状かなりいい線いってることは確かなはずと感じたことと
システム依存という情報が得られたこと(この情報があるだけでかなり色々なことが考えられますので)を踏まえ
今回の質問は締め切りとさせていただきます。
ども、ありがとうございました。
ご回答ありがとうございます♪
それは重要な情報ですね。
考えてみれば、OSと密接に関係してそうですからね。
将来的な移植の可能性を考えると、あまり長すぎるコードを組むのも得策ではないかもしれません。
とりあえずは、WindowsのXP以降を対象と考えたいところです。
ちょっと確認してみたら、現在は宣言と定義で占めて550行程度でした。
アプリケーションの総合的なパフォーマンスを考えると
これはかなり重要な部分ではあるので
逆に、内容にもよりますが、1000行くらいまでなら移植するのもそれほどきつくはないかな、と思っています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- デスクトップパソコン ん~…分からん 7 2022/06/10 10:47
- Windows 10 USBにwindows10をいれて起動する方法 5 2022/04/14 14:29
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/21 09:28
- ノートパソコン あなたのパソコン(Windows限定)は何年使っていますか? 4 2023/05/27 08:04
- PDF パソコンからUSBメモリにPDFを移したらファイルを開けない 2 2022/08/22 11:42
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- ドライブ・ストレージ SSDを追加したら昔のHDDがおかしくなった 4 2023/03/23 13:25
- ノートパソコン 自作にするか、メーカーか、オススメのノートPCをおしえてください。 5 2022/11/29 17:42
- USBメモリー・SDカード・フラッシュメモリー 銀行が振込データの受け渡しに未だにFDを使っている理由は「FDDがAドライブ固定だから」って本当? 11 2022/06/02 03:53
- その他(パソコン・周辺機器) Windowsマシン。USBタップの「自動切れ、再接続」がうざい。解決策は? 7 2023/01/25 08:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c言語のポインタへの文字列入力...
-
構造体でchar name[]と*nameの...
-
文字列ポインタとgets関数の関...
-
mallocで確保するメモリの領域...
-
void*型のデータサイズ
-
reallocについて
-
配列の添え字の最大数とは?
-
スタック破壊の上手な見つけ方...
-
HEAP に関すること
-
グローバル変数のサイズ
-
プログラムが途中で強制終了し...
-
GDI+におけるメモリの開放について
-
newでrealloc?
-
16進ダンプのプログラム
-
free関数で動作が止まる
-
mallocについて
-
malloc()関数内でセングメント...
-
C++のnewで確保したメモリーの...
-
allocってなんですか?
-
文字列のメモリ保持期間とポイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語のポインタへの文字列入力...
-
allocってなんですか?
-
newしないオブジェクトについて
-
malloc呼び出し時のセグメンテ...
-
入れ子になった構造体について
-
ヒープメモリの解放について
-
ビットをローテートするプログ...
-
C++で、メンバもヒープに確保さ...
-
void*型のデータサイズ
-
Win32APIでのメモリ管理について
-
配列の添え字の最大数とは?
-
C++のnewで確保したメモリーの...
-
プログラムが途中で強制終了し...
-
C言語 mallocとfreeについて
-
win32APIのHeapAlloc()の使い方...
-
LoadLibraryでAccess Violation...
-
グローバル変数のサイズ
-
MFCのCStringについて
-
メモリ不足になってしまう。
-
ヒープの実際の限界値は?
おすすめ情報