2014年8月4日月曜日

VC++の共有メモリについて

共有メモリについて

1. 共有メモリで共有時のメモリ容量について
大容量のデータをコピーする際は書込先と読込元と2箇所でデータを展開する必要が有るため、必要なメモリ容量は3倍になるかもしれない。(検証要)
共有メモリを作成時に、書込側でデータをコピーする必要が生じるため、同じプログラム内で、2倍必要になる(検証済み)
※もちろん、コピー元のデータを最初から、共有メモリで宣言していれば、データのコピーが不要になるため、メモリ容量が増えることはないが、その場合、共有メモリの増減(バイナリデータのnew deleteに当たる)は排他制御の絡みで、制御が非常に難解になると考えられる。

2.共有メモリで共有できるデータについて
バイナリデータ、構造体、どちらも可能。
同じデータを共有する場合、dll内でメモリマッピングを利用して、データを両方から読みだすのが一般的みたい。先輩が言ってた。

3.C++とC#間のメモリ共有について
ネットを調べた限りは可能。基本機能はC++、C#共にWindowsAPIを利用しており、問題はない。但し、C#はメモリポインタを扱う概念が無いため、unsafeでポインタを利用する必要がある。もし、.net4.5を利用するならば、専用のクラスが実装されているので、そちらを使えば良さそう(検証要)
参考になったページ
http://devlights.hatenablog.com/entry/20101123/p1


まとめ
いろいろ考えたが、メモリ容量が大きいデータを扱う場合は、そのデータの3倍近いデータを扱えるメモリ容量がないと、共有メモリを利用するのは止めておいたほうが良さそう。
・構造体の共有は一般的に可能なようだ。



以上です!

0 件のコメント:

コメントを投稿