キャッシュライブラリをDLLに移動し、複数のアプリケーションがGlobalAlloc()を使用してDLL内に割り当てられた単一のポインタを共有できるようにします。これをどのように達成することができますか?また、パフォーマンスが大幅に低下するでしょうか?DLLから複数のWin32アプリケーションへのGlobalAlloc()メモリの共有
1
A
答えて
2
確かにこれを行うことができ、単一のポインタにはパフォーマンス上の意味はありません。
従来のAPIであるGlobalAlloc
を使用するのではなく、別の共有ヒープを選択する必要があります。たとえば、COMアロケータであるCoTaskMemAlloc
を使用するのが最も簡単です。または、GetProcessHeap
で取得したプロセスヒープをHeapAlloc
に渡すこともできます。例えば
、およびエラーチェックを示すために無視:あなたはメモリは、それが作成された場所から別のモジュールに割り当て解除されることを期待する場合にのみ、ヒープの共有を心配する必要は
void *mem = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size);
注意を。あなたのDLLがメモリを作成して破壊するならば、普通の古いものを使うことができますmalloc
。すべてのモジュールは同じプロセスアドレス空間に存在するため、そのプロセス内の任意のモジュールによって割り当てられたメモリは、他のモジュールで使用できます。
更新
私はあなたが同じメモリへのアクセスを持っている複数のプロセスを望むことができることを可能にピックアップする質問の最初の読み取りに失敗しました。それが必要なのであれば、メモリにマップされたファイルやIPCの何らかの形でのみ可能です。
関連する問題
- 1. LinqからSQLへの複数のDBML共有タイプ
- 2. 共有メモリへのアクセスの同期
- 3. アプリケーション間のデータ共有 - 共有メモリとD-Busとファイル操作
- 4. Dllと共有変数
- 5. VS2010共有応答複数のWCFクライアントからSOAP 1.1サービスへのクッキー
- 6. VMからホストへのディレクトリの共有
- 7. 共有メモリ内のセマフォ、プロセス、インクリメント変数
- 8. WinDbgダンプリストプライベート/共有ワーキングセット。 DLLモジュールのメモリ質問
- 9. Xcodeの同じ共有コードから複数のアプリケーションを作成するには?
- 10. サーバ上の複数のPythonインタプリタはメモリ内のページを共有しますか?
- 11. IIS 6.0のアプリケーションプール共有DLL
- 12. 非分岐プロセスからの共有メモリへのアクセスを拒否する
- 13. DirectX11からDirectX9へのリソースを共有
- 14. Symbianの共有メモリの例
- 15. 複数のサーバー/アプリケーション間でグローバル変数を共有する
- 16. RDMAメモリ共有
- 17. ASP.Net複数のアプリケーションにまたがるマスターページ、Js、CSSの共有
- 18. OAuthのトークンを共有する複数のアプリケーション
- 19. CodeIgniter:複数のアプリケーション、リソースの共有方法?
- 20. Cメモリ共有の問題
- 21. JavaとC++の共有メモリ
- 22. postgresql共有メモリの設定
- 23. 共有メモリでのバンクコンフリクトフリーアクセス
- 24. Pythonプロセス間の共有メモリ
- 25. C++クラッシュの共有メモリ
- 26. C - 共有メモリの構造体へのキャスト
- 27. 共有メモリへの書き込み時のセグメンテーションフォルト
- 28. 複数のアプリケーション間で共通のキー値ストレージを共有できない
- 29. 複数のリッチテキストボックス間のフロードキュメントの共有
- 30. 複数のアプリケーション間でJSファイルを共有する
DLLを使用しているすべての独立したプロセス間でメモリを直接共有しますか?ヒープAPIは、プロセスごとのメモリを割り当てるため、そのためのAPIではありません。プロセス間でメモリを共有するには、[ファイルマッピングAPIを使用した共有メモリ](http://msdn.microsoft.com/en-us/library/windows/desktop/aa366551(v = vs.85))を使用する必要があります。 .aspx)(実際のファイルは必要ありません)。各プロセスで同じメモリを使用する一方で、メモリは異なるアドレスに終わる可能性があるので、異なるポインタ値を使用することに注意してください。 – BrendanMcK