問題タブ [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.
c++ - アプリケーションでより多くの RAM が必要な場合に、メモリのセグメントをディスクにスワップ アウトするにはどうすればよいですか?
約 2 GB の RAM を占有する大きな値のマトリックスがあります。
このマトリックスのコピーを作成する必要があります。その後、元のマトリックスをディスクにスワップ アウトして、後でロードすることができます。このマトリックスの内容は重要です。最初に計算するとコストがかかるため、簡単に破棄して再作成することはできません。行列をディスクにドロップしてからディスクから再ロードする方が、ゼロから再計算するよりも高速です。
私が持っているものよりも、次のアクセスまで一時的にディスクに配置するメモリのセクションを指定する簡単またはより良い方法はありますか?
リソース(2GBマトリックス)が不要な場合
- ファイルを開く
- ファイルをディスクに書き込む
- メモリを解放する
リソースが必要なとき
- ファイルを開く
- マトリックスで読む
- ディスクからファイルを削除する
私はファイルマッピングに出くわしましたが、これが正しい使い方かどうかはわかりません
c++ - MapViewOfFile と VirtualLock
次のコードは、結果のポインターへのアクセスがスレッドをブロックしないように、ファイルからシステム メモリにデータをロードしますか?
編集:
ダモンズの回答後に更新。
c++ - ベクターの送り方> MapViewOfFile経由
親プロセスに次のコードがあります。
子プロセスでこのベクターを受信しようとしています > が、子プロセスは毎回終了します。
matrix
子プロセスのデータを使用しようとするとエラーが発生します。小さな構造体は次のとおりです。
ベクターを子供に正しく受け取るにはどうすればよいですか?
linux - linux - ファイルの非線形部分をマップする
ファイルの非線形部分をプロセス空間で線形にマッピングする必要があるシナリオがあります。
たとえば、ファイルが 10 ページの場合、最初の 3 をマップし、4 をスキップし、最後の 3 をマップする必要があるかもしれません。マッピングは線形である必要があります。 4、5、6、7 はマッピングされませんでした。
Linuxでこれが可能かどうか知りたいです。
ありがとう。
windows - ユーザーモードプロセスからグローバルファイルマッピングオブジェクトを作成しようとすると失敗します
昇格を必要とせずに実行されるWindowsアプリがあります。アプリの実行中のすべてのインスタンス間で共有されるメモリ配列のファイルマッピングオブジェクトを作成する必要があります(これらのインスタンスの一部は異なるログオンセッションで実行される場合があることに注意してください)。
CreateFileMapping APIを呼び出して、グローバル名で作成します。つまり、アクセスを許可するGlobal\sharedname
セキュリティ記述子を使用しますが、そのAPIはエラーコード5またはで失敗します。all
everyone
ERROR_ACCESS_DENIED
次に、ドキュメントを読み始めましたが、プロセスにSeCreateGlobalPrivilege
特権が必要であることがわかりました。しかし、その特権を割り当てようとすると、AdjustTokenPrivilegesがエラーコードを返しERROR_NOT_ALL_ASSIGNED
、スタックします...。
それで、ここでのトリックは何ですか、その気紛れなMSは私たちにそれをどのように望んでいますか?
PS。all access for everyone
以前は、同じセキュリティ記述子と名前で問題なくグローバルな名前付きミューテックス(共有メモリへの同期アクセス用)を作成できましたGlobal\sharedmutex
。
winapi - 重複した IO またはファイル マッピング?
Windows アプリケーションには、ファイル名とバッファをラップするクラスがあります。ファイル名でそれを構築し、オブジェクトをクエリして、バッファがまだいっぱいかどうかを確認できます。そうでない場合は nullptr を返し、そうである場合はバッファ アドレスを返します。オブジェクトがスコープ外になると、バッファが解放されます。
データを非同期的にメモリに入れたいのですが、私が見る限り、2 つの選択肢があります。バッファを作成して ReadFileEx を介してオーバーラップ IO を使用するか、MapViewOfFile を使用して別のスレッドのアドレスにアクセスします。
現時点では、約 16MB を超えるリクエストは失敗する傾向があるため、いくつかの問題を提示する ReadFileEx を使用しています。バッファ クリーンアップの問題があります。また、クラスの複数のインスタンスが立て続けに作成されると、非常に面倒になります。
上限の問題がないため、別のスレッドでのデータのマッピングとタッチはかなり簡単に思えます。また、クライアントが今すぐデータを絶対に取得する必要がある場合は、単にアドレスを逆参照して、OS に心配させることができます。ページ フォールトが発生し、ブロッキング ヒットが発生します。
このアプリケーションはシングル コア マシンをサポートする必要があるため、私の質問は次のとおりです。別のソフトウェア スレッドでのページ フォールトは、現在のスレッドでのオーバーラップ IO よりも高くつくのでしょうか? 彼らはプロセスを停止しますか?オーバーラップした IO は同じようにプロセスを停止させますか、それとも私が理解できない OS マジックがありますか? ページ フォールトはオーバーラップ IO を使用して実行されますか?
私は次のトピックをよく読んで います 。 microsoft.com/en-us/library/windows/desktop/aa366556(v=vs.85).aspx (ファイル マッピング) しかし、パフォーマンスのトレードオフを行う方法を推測できないようです。
c++ - Visual C++6 MFC MapViewOfFile がエラー コード 8 を返す
マップ ファイルを作成するプログラムがあり、その呼び出しは問題なく実行できますm_hMap = CreateFileMapping(m_hFile,0,dwProtect,0,m_dwMapSize,NULL);
が、その後の関数呼び出しMapViewOfFile(m_hMap,dwViewAccess,0,0,0)
で を呼び出すと、エラー コード 8、つまり ERROR_NOT_ENOUGH_MEMORY、またはエラー文字列「エラー 十分なストレージがありません。このコマンドの処理に使用できます。」
そのため、MapViewOfFile が何をしてくれるのか、状況を修正する方法を完全には理解していません。
いくつかの数字...
私のページサイズは65536
c++ - C++ 別のクラスのパブリック メンバーへのアクセス
COM オブジェクトがあります。メイン クラスでは、2 つのパブリック メンバーを作成しました。
それらはファイルをマッピングするためのものです。COM オブジェクトのインスタンス化時にファイルをマップします。
COM オブジェクトのメイン クラスにはプライベート クラスがあります。このプライベート クラスから、これらのパブリック メンバーにアクセスします。
これは、マップされたファイルにアクセスする方法です。
しかし、コンパイラはこれを好みません。「非静的メンバー参照は、特定のオブジェクトに対して相対的でなければならない」と書かれています。
誰かがこれを正しく行う方法を教えてもらえますか? メインクラスでメンバーを公開することは知っていますが、プライベートクラス(上記のように)にもプライベートクラスがあり、特定のマップされたファイルにアクセスするにはすべてこのメンバーが必要であるため、そうする必要があります。
これは私がファイルをマップする場所です:
その後
m_App はクラスです。これは、COM オブジェクト メイン クラスのプライベート メンバーです。
このクラスにはサブクラスがあります。例: CTTSEngObj.m_App.SomeSmallClass
また、 SomeSmallClass はマップされたファイルにアクセスする必要があります。