キャッシュライブラリを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. スナップチャットから私のアプリケーションへの共有
- 2. 複数のアプリケーションインスタンス間でメモリを共有
- 3. Win32共有メモリからデータを取得できません
- 4. 複数のアプリケーション間での共有エンティティ(テーブル)へのベストアプローチ
- 5. LinqからSQLへの複数のDBML共有タイプ
- 6. 共有メモリへのアクセスの同期
- 7. 共有メモリの変数が
- 8. 複数のアプリケーション間でデータベースを共有
- 9. 複数の.NETアプリケーション共有認証
- 10. アプリケーション間のデータ共有 - 共有メモリとD-Busとファイル操作
- 11. 複数のプロセッサから共有配列
- 12. ユニバーサルWindowsアプリケーションからWin32アプリケーションへ
- 13. TFS:複数のプロジェクトで1つのDLLを共有する
- 14. Dllと共有変数
- 15. 複数の共有リンクを複数の共有リンクに接続...
- 16. 配列の共有ptrからの共有ptrへのアクセス
- 17. Linuxの共有メモリ
- 18. OpenCLの共有メモリ
- 19. WinDbgダンプリストプライベート/共有ワーキングセット。 DLLモジュールのメモリ質問
- 20. 複数のファイルを1つの共有フォルダから別のフォルダ共有にコピー
- 21. VMからホストへのディレクトリの共有
- 22. 共有メモリ内のセマフォ、プロセス、インクリメント変数
- 23. IIS 6.0のアプリケーションプール共有DLL
- 24. VS2010共有応答複数のWCFクライアントからSOAP 1.1サービスへのクッキー
- 25. Xcodeの同じ共有コードから複数のアプリケーションを作成するには?
- 26. 非分岐プロセスからの共有メモリへのアクセスを拒否する
- 27. Symbianの共有メモリの例
- 28. 複数のプロセスからのshared-mem DLLへの同時アクセス
- 29. サーバ上の複数のPythonインタプリタはメモリ内のページを共有しますか?
- 30. DirectX11からDirectX9へのリソースを共有
DLLを使用しているすべての独立したプロセス間でメモリを直接共有しますか?ヒープAPIは、プロセスごとのメモリを割り当てるため、そのためのAPIではありません。プロセス間でメモリを共有するには、[ファイルマッピングAPIを使用した共有メモリ](http://msdn.microsoft.com/en-us/library/windows/desktop/aa366551(v = vs.85))を使用する必要があります。 .aspx)(実際のファイルは必要ありません)。各プロセスで同じメモリを使用する一方で、メモリは異なるアドレスに終わる可能性があるので、異なるポインタ値を使用することに注意してください。 – BrendanMcK