問題タブ [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.

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

linux - Linux でメモリ マップ領域が縮小するのはなぜですか

この領域は動的にロードされるライブラリのようにファイルをマップするため、これを考慮してください。理想的には大きくなるはずです。これは、RLIMIT_STACK とヒープ開始の間の mmap 領域を開始することで実装できます。この場合、どのような問題が発生しますか。

それが成長した場合、新しいメモリマップ領域はどのように作成されますか。abc.so のコードを仮想アドレス空間にマップしたい場合、sizeof(abc.so) 空間を下方向に作成し、この領域の下部からファイルをマップする必要があります。これはどのように機能しますか?

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

performance - 一定のスペース使用量でディスクからデータをストリーミングするための最も効率的なイディオムは何ですか?

問題の説明

ディスクから大きなファイルをストリーミングする必要があります。ファイルがメモリに収まるよりも大きいと仮定します。さらに、データに対して何らかの計算を行っていて、結果がメモリに収まるほど小さいと仮定します。架空の例として、200GBファイルのmd5sumを計算する必要があり、RAMの使用量を保証して計算する必要があるとします。

要約すれば:

  • 一定のスペースである必要があります
  • できるだけ速く
  • 非常に大きなファイルを想定する
  • 結果はメモリに収まります

質問

一定のスペースを使用してファイルからデータを読み取る/ストリーミングする最速の方法は何ですか?

私が持っていたアイデア

ファイルがメモリに収まるほど小さい場合、mmapPOSIXシステムでは非常に高速になりますが、残念ながらここではそうではありません。mmapファイルの連続するチャンクをバッファリングするために小さなバッファサイズで使用することにパフォーマンス上の利点はありますか?バッファをファイルの下に移動するシステムコールのオーバーヘッドがmmap利点を左右しますか、それとも、読み込んだ固定バッファを使用する必要がありfreadますか?

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

c++ - C または C++ - ディスクでバックアップされた共有メモリを動的に拡大/縮小

データを共有することになっているいくつかの fastcgi プロセスがあります。

データはセッション (一意のセッション ID 文字列) にバインドされ、サーバーの再起動後も存続できるはずです。セッションの数によっては、共有データが大きすぎてメイン メモリに収まらない場合があります。理想的には、共有データが特定のしきい値を超えた場合、最もアクティブでないセッションにバインドされたデータはディスクにのみ存在し、最もアクティブなセッション データはメイン メモリから使用できるようにする必要があります。セッションがしばらく非アクティブになった後、セッション データは破棄されます。

私の質問は(C / ++の初心者であること)です:

この非常に厄介な問題に取り組むのに役立つアプローチやライブラリはありますか?

mmap()非アクティブなセッション データを破棄する必要があることを考慮して、共有メモリを使用することは可能ですか?

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

c++ - mmapの問題、大量のメモリを割り当てます

解析する必要のある巨大なファイルをいくつか入手しました。ファイル全体をメモリ内に割り当てる必要がないため、人々はmmapを推奨しています。

しかし、「top」を見ると、ファイル全体をメモリに開いているように見えるので、何か間違ったことをしているに違いないと思います。「トップショー>2.1ギグ」

これは、私が行っていることを示すコードスニペットです。

ありがとう

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

python - ディスクに書き込まずにPythonプロセス間でデータを共有する方法

こんにちは、Python とプロセスの間で少量のデータ (< 1K) を共有したいと思います。データは、急速かつ頻繁に (24x7x365) 変更される物理 pc/104 IO データです。データを書き込む単一の「サーバー」と、その一部を読み取る複数のクライアントが存在します。これが実行されるシステムは、ハード ドライブではなくフラッシュ メモリ (CF カード) を使用するため、ファイル ベースのスキームでフラッシュ メモリが消耗するのが心配です。また、100% 太陽光発電であるため、使用する電力 (プロセッサ時間) を減らしたいと考えています。

  • これは正当な心配ですか?CFカードをSSDに変更できるかもしれません。
  • mmap を使用して値を変更すると、データが物理的にディスクに書き込まれますか?それとも、これは仮想ファイルですか?
  • Debian で実行するので、Python モジュール用の POSIX IPC が最適なソリューションです。誰かがそれを使用しましたか?
  • Python Object Sharing (POSH)モジュールを試した人はいますか? 一見有望に見えますが、「アルファ版」であり、積極的に開発されているようには見えません。

ありがとうございました

更新: 最大データ更新レートを約 10 Hz に遅くしましたが、より一般的には 1 Hz です。クライアントは、一定の更新レートではなく、値が変化したときにのみ通知されます。各サーバーが特定の種類の機器または機能に特化した複数サーバー/複数クライアント モデルに移行しました。ほとんどのプログラミングは Java プログラマーによって行われることが判明したため、最終的には JSON-RPC over TCP を使用することになりました。サーバーは Java で作成されますが、メインのクライアントを Python で作成したいと考えており、JSON-RPC の実装を調査しています。

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

java - Java、C ++、NIO、mmapedバッファー、同期

解説:

私はLinux/Macを使用しています。

私のコードの一部はJavaであり、私のコードの一部はC++です。

どちらも、高速通信のために同じファイルをmmapしています。

JavaとC++のコードを同期させたい。

私は次のことを知っています:

1)Javaで2つのスレッドが与えられた場合、ロック/モニターを使用できます。

2)Javaで1つのコード、C ++で1つのコードが与えられた場合、tcp/ipを介してそれらを同期させることができます

3)メモリの領域をmmapした2つのC ++コードが与えられた場合、mmapされた領域の整数に対してgccのcompare_and_swapを使用してそれらを同期させることができます。

質問:

コードの一部がJavaであり、コードの一部がC ++であるとすると、どういうわけか(3)-JVMはある種のアトミックコンペアアンドスワップをサポートしますか?では、私のJavaコードとC ++コードの両方で、この整数を一種のロックとして使用できますか?

ありがとう!

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

c++ - メモリ内の_特定の_領域をmmapするにはどうすればよいですか?

プログラムがあります。さまざまな実行で特定のメモリ領域を mmap できるようにしたい。

  1. プログラムのソースコードがあります。C/C++
  2. プログラムのコンパイル方法を制御します。gcc
  3. プログラムのリンク方法を制御します。gcc
  4. プログラムの実行方法を制御します (Linux)。

この特定のメモリ領域が必要なだけです.0xabcdabcdから0xdeadbeefまで、特定のファイルにmmapします。とにかくこれを保証するものはありますか?(この特定のリージョンに他のものがロードされないようにするには、どうにかして確認する必要があります)。

編集:

メモリ内のこの特定の領域を他に何も取得しないようにするにはどうすればよいですか?

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

c++ - Linux でメモリの読み取り専用領域を共有する 2 つの C++ アプリ

P1 と P2 の 2 つのプロセスがあります。

「R」と呼ばれるこの大きな読み取り専用リソースがあり、P1 と P2 の両方がアクセスできるようにします。

R は単なる「フラットな」バイトのグループではありません。これは、相互にポイントする C++ オブジェクトの集まりです。

P1 と P2 が R の 1 つのコピーのみを共有することをお勧めします。何らかの方法で P1 が R をメモリ内の領域 (同じアドレスで P1 と P2 にマップされている) にロードすると、P1 と P2 は両方とも R 内のオブジェクトに次のようにアクセスできます。 C++ オブジェクト (すべてが読み取り専用であるため、競合状態はありません)。

これを行う方法に精通している人はいますか?

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

windows - mmap の移植性は?

私はmmapファイルの読み取りに使用することを検討しており、それがどれほど移植性があるか疑問に思っていました。Linux プラットフォームで開発していますが、自分のプログラムを Mac OS X と Windows で動作させたいと考えています。

mmapこれらのプラットフォームで動作していると推測できますか?