Windows の共有メモリ セグメントに少量のデータ (数バイトのみ) を格納するためのアドバイスと提案を探しています。
現在、共有メモリをマップするときはいつでも、マッピング サイズを最も近い 4KB に切り上げて、複数のページがマップされるようにしています。
mem_size = ((mem_size + 4095) / 4096) * 4096;
ただし、プロセス間で名前付き整数を共有するのに十分なメモリをマップしたいと考えています。または、より具体的には、プロセス間で名前が異なる多くの整数。私が見ているのは、すべてが異なる名前で、それぞれが1つ以上のプロセスによってマップされている約1000の整数です。
これは大きな無駄になるため、4 バイトを 4KB に丸めたくありません。これらを 1000 ほど作成した後、必要なページが 1 つだけの場合でも、約 1000 ページを使用したことになります。
しかし、たった 4 バイトの名前付きメモリ セグメントを作成するオーバーヘッドが心配です。OS は、可能であれば、異なるマッピングを同じページに収めるのに十分「合理的」でしょうか? (保証はありません、私は知っています)。それとも、これはすぐに吹き飛ばされますか?
メモリの 1 つの巨大なブロックをマッピングすることを検討しましたが、個々の整数を名前で参照する必要があります。共有メモリ内にハッシュ テーブルを維持することは、OS の作業を複製しているように思えます。
プロセス間で非常に少量のデータを共有するのにより適したCreateFileMapping/OpenFileMapping
and手法の代替手段はありますか? MapViewOfFile
それとも何も心配していませんか?