問題タブ [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.
mmap - mmap() 内部
最も重要な mmap() 機能は、ファイル マッピングが多くのプロセス間で共有されることであることが広く知られています。しかし、すべてのプロセスが独自のアドレス空間を持っていることはあまり知られていません。
問題は、memmap されたファイル (より具体的にはそのデータ) が実際にどこに保存されているか、プロセスがこのメモリにアクセスするにはどうすればよいかということです。*(pa+i) やその他の高レベルのものではなく、プロセスの内部を意味します。
solaris - mmapは連続メモリを使用しますか?(ソラリス上)
私はmmap(mmapがどのように機能するかを理解しよう)を使用して96kの匿名メモリを割り当てましたが、96kを64kと32kに分割したようです。ただし、960kを割り当てる場合、サイズが960kのチャンクを1つだけ割り当てます。ソラリスが割り当てメモリをいくつかの部分に分割するのはいつですか?コード:
トラス:
Pmap:
java - FileChannel#map のメモリ使用量
FileChannel#map
結果に必要なすべてのメモリをすぐに割り当てますかByteBuffer
、それともバッファからの読み取り中にオンデマンドでのみ割り当てられますか?
簡単なテスト プログラムで 500 MB 以上のファイルをすべてマッピングして、プロセスのメモリ使用量を調べました。(両方Runtime#totalMemory
を使用し、groovysh プロセスの OS X アクティビティ モニターでそれを観察します。) メモリ使用量が 30 MB を超えることはありませんでした。
では、Java 実装は、ネイティブ呼び出しでのメモリ使用量の一部を「隠す」ことができますか? もしそうなら、それが OS X でどれくらいあるかを調べる方法はありますか?
solaris - mmap はシステム全体の CPU ではなくユーザーの CPU を使用しますか? (ソラリス)
mmap を使用していくつかの匿名メモリを割り当てる場合、開始アドレスを 0/null に設定することが多いため、mmap は開始アドレスを自動的に判断します。開始アドレスを取得するには、仮想メモリ空間全体を調べて、メモリのチャックを割り当てることができる穴を見つけます。これはsys cpuではなくuser cpuとして計算されていると思います。仮想メモリが断片化されている場合、開始アドレスを見つけるためにより多くのユーザー CPU が使用されます。私の理解は正しいです。
c++ - Shmem vs tmpfs vs mmap
誰かが次の3つが速度の点でどれほどよく比較されるか知っていますか?
共有メモリ
tmpfs(/ dev / shm)
mmap(/ dev / shm)
ありがとう!
mmap - mmap ビッグ エンディアンとリトル エンディアン
mmap
を書いていた場合uint32_t
、ビッグ エンディアン/リトル エンディアンの規則で問題が発生しますか? 特に、ビッグ エンディアン マシンでデータを書き込んだ場合、mmap
リトル エンディアン マシンでそのデータを読み込もうとすると問題が発生しますか?
linux - Linuxでclone()システムコールのスタックをmmapする方法は?
Linux の clone() システム コールは、新しく作成されたスレッドが使用するスタックを指すパラメータを取ります。これを行う明白な方法は、単純にいくつかのスペースを malloc して渡すことですが、そのスレッドがこれまでに使用する (予測するのが難しい) ほど多くのスタックスペースを malloc したことを確認する必要があります。
pthreads を使用するときはこれを行う必要がなかったことを思い出したので、代わりに何をするのか興味がありました。このサイトに出くわしました。「Linux pthreads 実装で使用される最善の解決策は、mmap を使用してメモリを割り当てることです。フラグは、使用時に割り当てられるメモリの領域を指定します。この方法では、メモリが割り当てられます。システムが追加のメモリを割り当てることができない場合、セグメンテーション違反が発生します。」
mmap が使用されているのを聞いたことがある唯一のコンテキストは、ファイルをメモリにマッピングするためのものであり、実際に mmap のマニュアルページを読むにはファイル記述子が必要です。clone() に与える動的な長さのスタックを割り当てるために、これをどのように使用できますか? そのサイトはただのクレイジーですか?;)
どちらの場合でも、カーネルは、ユーザーが新しいプロセスを起動するときに常に実行しなければならないことなので、新しいスタック用の空きメモリの束を見つける方法を知る必要はありませんか? カーネルがすでにこれを把握できるのに、そもそもスタック ポインターを指定する必要があるのはなぜですか?
c - Linux mmap() エラー
バッファの内容を解析したいメモリマップファイルがあります。mmap() は成功を返し、fprintf を使用してバッファーの内容をファイルに正常に出力できます。ただし、プログラムでバッファを配列として直接アクセスしようとすると、セグメンテーション違反が発生します。なぜこうなった?コードは次のとおりです。
c - 大きなファイルのマッピング(永続的な大きな配列の場合)
私はmmapを介して永続的な大きな定数配列を実装しています。mmapを使用するときに知っておくべきヒントやコツや落とし穴はありますか?