問題タブ [file-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.
winapi - Windows API: ファイル マッピング ハンドルの検索プロセス
定義済みのプロトコルを持つ SSH エージェント (PuTTY の pageant.exe に似ています) を作成しました。認証要求は、ファイル マッピングの名前を含む WM_COPYDATA を介してエージェント ウィンドウに送信されます。
特定のファイル マッピングを作成したプロセス (最終的にはプロセス名) を特定することはできますか?
「filemap」で GetSecurityInfo を使用してセキュリティ属性 (SID、GID など) を取得できますが、プロセス自体を取得するにはどうすればよいですか?
重要な注意: プロトコルを変更することはできません (たとえば、送信者に関する情報を WM_COPYDATA に追加するなど)。これは、すべての PuTTY ライクなアプリケーションで使用される定義済みのプロトコルです。
java - 大きなファイルをメモリマップできません。マップに失敗しました。OutOfMemoryError
これが私のコードです:
エラーは次のとおりです。
32 ビット システムで 1.5GB のファイルをマップしようとしています。
nio はこの問題に対処することになっていると思いました。私は何か間違ったことをしていますか?
よろしく。
c# - .Net ファイル マッピングの問題
次の 2 つのプロセスがあります。
- Win32、C++ - ライター
- .Net 4.5、C# - リーダー
最初のプロセスはバッファを作成し、2 番目のプロセスのために共有します。
- (int)(buffer+0) - 書き込めるまで。
- (int)(buffer+4) - 読み取り可能になるまで。
- ... - ブロック [size_mess][mess]
循環性を記録します。つまり、バッファの最後に到達したら、最初にシークします。
ある時点でエラーが発生します。
1 プロセスは、データが読み取られるのを待ちます。2 プロセスはブロックを読み取りますが、古いデータ (前のパスで記録されたもの) を読み取ります。
MemoryMappedViewAccessor、MemoryMappedViewStream を使用してみました...効果なし
.NET による遅延の可能性はありますか?
memory-management - ディスクファイルに裏打ちされた malloc を実装する (dmalloc)
一般的な malloc および mmap の説明
malloc (または任意の割り当て関数) は、アプリケーションにメモリを割り当てることになっています。標準の glibc malloc 実装では、sbrk() システム コールを使用してメモリを割り当てます。アプリケーションに割り当てられたメモリは、ディスクによるバックアップではありません。アプリケーションが一掃された場合にのみ、メモリの内容がディスク (事前に構成されたスワップ ディスク) に移動されます。
メモリを割り当てるもう 1 つの方法は、mmap を使用することです。mmap システム コールは、呼び出しプロセスの仮想アドレス空間にマッピングを作成します。以下は、POSIX 標準による mmap 関数の宣言です。
void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
/* いくつかの重要なパラメータの意味を mmap に記述します */
mmap システム コールを使用してメモリを割り当てることもできます。通常、これはアプリケーション バイナリまたは静的ライブラリのロードに使用されます。たとえば、次の mmap 呼び出しは、バッキング ファイルなしでメモリを割り当てます。
アドレス = __mmap (0、長さ、PROT_READ|PROT_WRITE、MAP_ANONYMOUS|MAP_PRIVATE、-1、0);
フラグ MAP_ANONYMOUS: マッピングはどのファイルにも依存していません。その内容はゼロに初期化されます。
MAP_PRIVATE: プライベート コピー オン ライト マッピングを作成します。マッピングの更新は、同じファイルをマッピングする他のプロセスには表示されず、基になるファイルには反映されません。
dmalloc dmalloc は、ディスクにバックアップされたファイルを使用してメモリを割り当てる新しい API です。つまり、MAP_ANONYMOUS と MAP_PRIVATE を mmap に指定しません。dmalloc は、HDD と比較して読み取り/書き込みの待ち時間が非常に短い SSD で特に役立ちます。ファイルは RAM にマップされるため、dlmalloc も高速 RAM の恩恵を受けます。
代替案
SSD を最高優先度のスワップ デバイスとして構成することもできますが、このアプローチでは、Linux カーネル内の HDD 最適化スワッピング アルゴリズムが問題になります。スワッピング アルゴリズムは、スワップ時にアプリケーション ページをクラスタ化しようとします。スワップからのデータが必要な場合、完全なクラスターを読み取ります (先読み)。アプリケーションがランダム IO を実行している場合、先読みデータによって不要な IO がディスクに発生します。
質問:-
- 「ディスクでバックアップされたファイルを使用してメモリを割り当てます。つまり、MAP_ANONYMOUSおよびMAP_PRIVATEを使用せずにmmapに割り当てます。」これら2つとは別に、どのフラグを使用する必要がありますか。
- アプリケーションに割り当てられたメモリのオンライト バックアップを作成する方法。
visual-c++ - Visual C ++でLPTSTR変数をパラメータとしてメッセージが値を読み取る方法は?
fileMapping 関数を使用して読み書きする方法を示す MSDN の例を試しました。MSDN から参照できるように、ここにコードを貼り付けます。リンクはhttp://msdn.microsoft.com/en-us/library/windows/desktop/aa366551(v=vs.85).aspxです。
このステートメントがある場合 MessageBox(NULL, pBuf, TEXT("Process2"), MB_OK); これは pBuf (LPCTSTR 変数) を取り込み、ファイルに入力された内容を出力します。pBuf が指すものを取得したい、または誰かがメッセージボックスが値を読み取る方法を案内できます。*pBuf を使用してみましたが、いくつかの場所が表示されます。私はここで立ち往生しています。助けてください。
c - CreateFileMapping() for writing text whose length is unknown to file
I want to write text to file. The length of text is unknown. So I have no idea to set the size of mapped memory to be used, and I set it to 100. Then, problem appears! the string is written successfully, but the rest space of 100 bytes is filled with NULL!! How can I avoid it???