問題タブ [mmap]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - ユーザー空間から mmap のページの汚れを見つけることはできますか?
Linux 2.6.30 以降で、ユーザー空間から (非共有) mmap のページの汚れにアクセスできますか? プラットフォーム固有のハックとクラッジは大歓迎です。
理想的には、mmap された領域のページごとに 1 つ (4kB?) のビット配列を探しています。これは、領域が mmap されてからそのページに書き込まれた場合に設定されます。
(書き込みを行うプロセスがこの情報を追跡できることは承知していますが、とにかくカーネルがそれを行っている場合、そうするのはばかげているようです。)
ありがとう、
クリス。
c - 手動でのみディスクに同期されるmmapを使用してチェックポイントファイルを作成する方法
ファイルをメモリと定期的に同期する最速の方法が必要です。
私が欲しいと思うのは、手動でディスクに同期するだけのmmapファイルを作成することです。自動同期を防ぐ方法がわかりません。
手動で指定した場合を除き、ファイルを変更することはできません。重要なのは、状態のスナップショットをメモリに保持するチェックポイントファイルを用意することです。かなり頻繁に呼び出す必要があり、速度が重要であるため、コピーはできるだけ避けたいと思います。
c - POSIX mmapが揮発性ボイド*を返さないのはなぜですか?
Mmapはvoid*を返しますが、。は返しませんvolatile void*
。mmapを使用して共有メモリをマップしている場合、別のプロセスがそのメモリに書き込んでいる可能性があります。つまり、同じメモリ位置からの2回の後続の読み取りで、異なる値が生成される可能性があります。では、なぜ揮発性のボイド*を返さないのでしょうか。
私の推測では、共有メモリセグメントに排他的に書き込むプロセスがある場合、存在するものを常に正しく理解しているため、揮発性ポインタを介して共有メモリを調べる必要はありません。冗長な読み取りを防ぐためにコンパイラーが行う最適化は、その足元に値を書き込んだり変更したりするものが他にないため、重要ではありません。それとも他の歴史的な理由がありますか?戻るvolatile void*
のがより安全なデフォルトであり、この最適化が必要な場合は手動でvoid*にキャストできると言いたくなります。
POSIX mmapの説明:http://opengroup.org/onlinepubs/007908775/xsh/mmap.html
python - ウィンドウの下でmmapに書き込もうとしたときの奇妙なエラー
この単純なPythonコード:
次のエラーが発生します(mmap.mmap(...)行):
WindowsError:[エラー1006]ファイルのボリュームが外部から変更されたため、開いているファイルが無効になりました
なぜですか?
posix - 32 ビット FreeBSD 7.2 および 1GB mmap
FreeBSD と大きな mmap で問題が発生しています。Linux では同じ問題は発生しません。
プログラムの起動時に、常に 1 GB のマップを取得できます。ただし、ファイルが置き換えられて再マップされるリロード操作があります。通常、新しいマップは毎回少しだけ大きくなるため、古い mmap の場所にはうまく収まりません。このリマップは、FreeBSD ではしばしば失敗しますが、Linux ではほとんど失敗しません。(ASLR を使用する Linux ではより頻繁に失敗します。FreeBSD はASLRを使用しますか?)
これは、ライブラリが他のライブラリをロードし、プログラムの実行中に仮想メモリ空間を断片化するメモリ割り当てが行われたためだと思います。おそらく、これを引き起こす FreeBSD の malloc 実装またはライブラリのロードの特殊性があります。
私はそれが機能する可能性を高めるためにできることを探しています。
私が考えていることの 1 つは、ファイル サイズが実際には 890 MB であっても、常に 1 GB のスペース全体を mmap することです。私がそれを機能させることができれば、新しい 895 MB ファイルを再マップするための 1 GB スロットを常に確保できます。
iphone - メモリマップUIImage
があり、UIImage
そのデータをファイルに入れてから、マップされたファイルを使用してメモリを節約したいと思います。どうやら、UIImage
データはプライベートであり、それにアクセスすることはできません。それを解決するための提案はありますか?
ありがとう!
linux - 予約済みのスタックスペースから割り当てるmmap領域?
私たちの製品ではmalloc
、メモリ割り当てをmmapのみに依存する実装を使用しています。alloca
また、 ingのフェアユースも行っています。mmapがスタックスペースに予約する必要のある領域を割り当てるという問題が発生しました(したがって、より大きなアロカの1つがmallocされた領域に流出すると、非常に悪いことが起こります)。
プロセスの割り当ての制限は、物理メモリではなく、VMアドレス空間です。プロセスの実行中に/proc/ * / mapsファイルを監視し、mallocが使用可能なアドレス空間を使い果たすのを監視しました。最終的には、スタックのrlimit-set範囲内にアドレスを割り当てることに頼り、最終的には大幅に拡張さalloca
れます。
起動時にスタック制限全体を使用して回避alloca
しようとしましたが、プラットフォーム間で安定していることが証明されていません(alloca
2.6本番マシンで動作しているときに2.4開発ボックスのdメモリにアクセスしようとするとsegfaultsが発生します) 。
実際にアドレス空間を予約する方法はありますか?他に何ができますか?
c - ダーウィンには本当に mremap がありませんか?
Macでメモリマップファイルを再マップする方法を見つけようとしています(利用可能なスペースを拡張したい場合)。
Linux の世界の友人が持っているのを見ますmremap
が、私の Mac のヘッダーにはそのような機能が見つかりません。/Developer/SDKs/MacOSX10.6.sdk/usr/include/sys/mman.h
次のものがあります。
mmap
mprotect
msync
munlock
munmap
- でもいいえ
mremap
man mremap
私の恐れを確認します。
現在、マップされたファイルのサイズを変更したい場合は、ロードされたすべてのページを無効にする必要がありますmunmap
。mmmap
もっと良い方法があるはずです。もちろん?
Mac OS X と Linux で動作するコードを書こうとしています。必要に応じて、それぞれのケースで最適な関数を使用するようにマクロを設定することもできますが、適切に実行することをお勧めします。
linux - メモリマップトファイルのファイル名を変更する
すでに開いているメモリマップトファイルの名前を変更することはできますか、それとも、ファイルを閉じて名前を変更してから、もう一度mmapする必要がありますか?
linux - ダイレクト IO の mmap: アドレスが間違っていますか?
匿名のmmapでメモリを割り当てました:
次に、O_DIRECT で開いた fd を使用して書き込みます。
しかし、不正なアドレスエラーが発生します:
住所はいい感じです。
バッファを .data に割り当てて 512 に揃えると、書き込みが機能するので、open() と write() は問題なく、すべての権限を持っています。
どうしたの?512 アライメント以外に直接 IO の要件はありますか?
アップデート:
たとえば、次のように mmap を変更すると:
できます: