問題タブ [memory-mapping]

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.

0 投票する
3 に答える
1576 参照

c - MapViewOfFileがrapidxmlの使用できないポインタを返すのはなぜですか?

提案されているように:私は2ギガより大きいファイルを持っています。次の関数を使用してメモリにマッピングしています。

ptrを受け入れるrapidxmlに解析しますCh*。Rapidxmlのドキュメントによるptrと、変更可能である必要がありますが、タイプであると宣言されているため、char*これを行うことはできません。プログラムはコンパイルされますが、実行時に次のエラーでクラッシュします:アクセス違反。これは、を解析しているときに発生することがわかりましたchar*。どうすればこれを回避できますか?

0 投票する
1 に答える
1110 参照

java - オブジェクトを Java GZip し、MappedByteBuffer を使用してシリアル化します

大規模な 3D 配列をディスクにシリアライズしています。元のデータは約 50MB で、GZiped の出力は KB のサイズです。しかし、操作には約 5 秒かかります。時間を最適化したいと考えています。通常のストリーム書き込みよりもパフォーマンスが優れていることがわかったので、マップされた読み取り/書き込みを使用することをお勧めします。しかし、マップされた書き込みと一緒に ObjectOutputStream と GZIPOutputStream を使用する方法がわかりません。オブジェクト出力ストリームを使用して、同じことをした経験がある場合はサンプルコードを投稿してください。

0 投票する
5 に答える
16079 参照

memory-management - 12 ビットのオフセットを持つ 16 ビットのアドレスで 4KB のページ サイズになるのはなぜですか?

「Modern Operating System」という本を読んでいます。そして、「ページサイズ」について混乱しています。

本の中で、著者は次のように述べています。

受信した 16 ビットの仮想アドレスは、4 ビットのページ番号と 12 ビットのオフセットに分割されます。ページ番号に 4 ビットを使用すると、16 ページを持つことができ、オフセットに 12 ビットを使用すると、ページ内の 4096バイトすべてをアドレス指定できます。

なぜ 4096 バイトなのですか? 12 ビットで、ページ内の4096エントリをアドレス指定できます。ただし、1 エントリはアドレスです (この場合、アドレス サイズ = 16 ビット)。したがって、4096(エントリ) * 16(ビット) = 4096(エントリ) * 2(バイト) = 8KB をアドレス指定できると思いますが、なぜ本は 4096 (バイト) をアドレス指定できると言っているのですか?

前もって感謝します!:)

0 投票する
2 に答える
5681 参照

linux - /proc/self/maps の「---p」パーミッションはどういう意味ですか?

rwxps ビットの意味を理解しています。r-xp は .text 用です。rw-p は .data/.bss/heap/stack 用です。---pページだけの使用は何ですか?

たとえば、次の出力を参照してくださいcat /proc/self/maps

0 投票する
2 に答える
360 参照

c - Cマクロを介してアドレス割り当てを関数の引数に変換することは可能ですか?

私は埋め込みコードに取り組んでおり、メモリマップされた多くのレジスタ割り当てをget()/ set()関数呼び出しに変換しようとしています。コード全体に散らばったアドレス割り当てを維持できるかどうか疑問に思いましたが、関数の引数として割り当てを受け取るように#definesを変更します。

古い方法:

望ましい新しい方法:

では、このシナリオはCマクロで可能ですか?あなたの考えをありがとう!

0 投票する
1 に答える
699 参照

c++ - Centos 5.5 にアップグレードした後、MAP_GROWSDOWN によって SIGBUS エラーが発生するのはなぜですか?

ビルドの 1 つで OS を Centos 5.3 32 ビットから Centos 5.5 32 ビットにアップグレードしていました。パッケージの更新を行った後、再起動し、ソースのクリーン コピーをチェックアウトし、ビルドして単体テストを実行しました。MemMap 基本クラスに依存するすべての単体テストが失敗し始めました。

メモリをマッピングした直後にガード ページの値を設定しようとすると、クラッシュが発生します。調べてみると、問題を MAP_GROWSDOWN フラグの使用に切り分けることができました。フラグが設定されていなくてもテストは正常に実行されますが、フラグが設定されているとクラッシュします。これらのテストは、ビルド システムが 5.3 を実行していたときは問題なく動作しましたが、5.5 にアップグレードするとすぐにクラッシュし始めました。また、5.5 を実行しているが実際のハードウェアである私の開発マシンでも問題なく動作します。ビルド システムは XEN VM です。これは、いくつかのリリースで変更されていない安定したコードであり、単体テストのカバレッジは 80% を超えています。

だから私の質問は、なぜこれが起こっているのですか?

0 投票する
2 に答える
564 参照

c - メモリ マップド インターフェイスに関するさらなる質問

メモリ マップド デバイスを扱う C コードにはまだ問題があります。現時点では、揮発性ポインターとして書き込むレジスターのアドレス空間を宣言し、以下に示すようにデータを書き込みます。

これは多かれ少なかれうまく機能します。ただし、メモリにマップされたレジスタとやり取りする特定の読み取りおよび書き込み関数が必要です。理想的には、次のようになります。

正直なところ、まだ試していませんが、これが適切な方法であるかどうかを誰かに教えてもらえないでしょうか?

編集: 多分それは他の誰かに役立つかもしれません.ここに私の機能があり、それらは機能しているようです. 参考になるコメントをありがとうございます!

どうもありがとう

0 投票する
4 に答える
1444 参照

c++ - メモリマップされたフォーマットされたファイルから整数を読み取る

次のように、1行に1つの整数を含む大きなフォーマット(テキスト)ファイルをメモリマップしました。

したがって、最初のバイトにメモリへのポインタがあり、最後のバイトにメモリへのポインタもあります。私はこれらすべての整数をできるだけ速く配列に読み込もうとしています。最初に、std::istreamを操作してそのメモリから読み取るための特殊なstd::streambufクラスを作成しましたが、比較的遅いようです。

「1231232\r \ n123123 \ r \ n123 \ r \ n1231 \ r \n2387897...」のような文字列を配列{1231232,123123,1231,231,2387897,. ..}?

ファイル内の整数の数は事前にはわかりません。

0 投票する
8 に答える
4285 参照

c++ - ハードウェア ポートをメモリ アドレスにマップする実際のプラットフォームは?

一部のプラットフォームでは、次の C または C++ コードに関する記述を時々目にします。

ptrポートがマップされているアドレスをたまたま格納すると、ハードウェア入出力ポートに書き込む可能性があります。通常、それらは「組み込みプラットフォーム」と呼ばれます。

そのようなプラットフォームの実際の例は何ですか?

0 投票する
1 に答える
139 参照

python - mmapping in Python C モジュール - 注意すべき落とし穴はありますか?

私は C で Python モジュールを作成しており、大規模なメモリ ブロック (おそらく 500 MB) を mmap するつもりです。Python インタープリターと同じプロセス空間で作業する場合に注意すべきことはありますか?