MapViewOfFile によって割り当てることの出来るビューのサイズは実メモリの搭載量によって影響されるものなのでしょうか?
MapViewOfFileによる割り当てはプロセスの仮想メモリ空間への割り当てのため、実メモリ搭載量には関係ないように思えるのですが、実際には影響を受けているように思えます。
はたして実メモリ搭載量は MapViewOfFile で割り当てられるビューのサイズの最大量に影響を及ぼすのかどうか、また及ぼすのであれば、その仕組みを教えていただけないでしょうか?
(実メモリが十分にないところで大きなビューを割り当ててもパフォーマンス上、問題があるということは理解しておりますので、あくまでも仕組み上はどうなのかというところを教えていただければありがたいです)
>2GBの仮想アドレス領域内に連続した空き領域があれば
>ビューの割り当てはできるように思えるのですが、
すべてのプログラムの合計なので現実は2Gは不可能です。
実験では1.5G程度でした。
http://itpro.nikkeibp.co.jp/article/Windows/20051111/224393/?ST=...
以下のページ化プール領域の最大が470M,非ページ化プール領域
256Mの制限があります。両方ともすべてのアプリ・OSで
共用されています。 いずれも通常自動でサイズが計算され
利用されています。
最悪1Gのファイルマッピングを行う場合最悪100Mのページ
化プール領域が必要ですが。 そのサイズの空は通常
システム搭載のRAMに比例して自動決定されます。
(PagedPoolSize,NonPagedPoolSize)
通常実メモリーから自動計算されるので結果実メモリー
に依存することになります。
以下にありますが、OSの改善によりできるサイズが拡大
されてはいますが。 すべてのWindowsではありません。
http://msdn.microsoft.com/msdnmag/issues/01/12/XPKernel/
プールに空きがプログラム動作時に空きあれば動作するし
なければ動作しません。
>実メモリ搭載量は MapViewOfFile
http://support.microsoft.com/kb/830783/ja
>割り当てることの出来るビューのサイズ
割り当てが出来るビューのサイズは、実メモリー及び
連続してメモリー上に割り当て可能なアドレス空間が
あるかどうかが問題になる。
一般的な32bitのWindowsでは仮想アドレスの
総合計が通常2Gに制限されている。
ありがとうございます。ただ、申し訳ありませんが、ちょっと分かりにくいです。
3番目のURLにあるように32bitプロセスでの仮想アドレス領域は2GBあるわけで、MapViewOfFileを呼び出したプロセスの2GBの仮想アドレス領域内に連続した空き領域があればビューの割り当てはできるように思えるのですが、いかがでしょうか?
「割り当てが出来るビューのサイズは、実メモリー及び連続してメモリー上に割り当て可能なアドレス空間があるかどうかが問題になる」とご回答いただいた中の、「実メモリー」がビューのサイズに影響を及ぼすという点について、ソースあるいはその仕組みをご存じでしたら教えていただけないでしょうか?
>2GBの仮想アドレス領域内に連続した空き領域があれば
>ビューの割り当てはできるように思えるのですが、
すべてのプログラムの合計なので現実は2Gは不可能です。
実験では1.5G程度でした。
http://itpro.nikkeibp.co.jp/article/Windows/20051111/224393/?ST=...
以下のページ化プール領域の最大が470M,非ページ化プール領域
256Mの制限があります。両方ともすべてのアプリ・OSで
共用されています。 いずれも通常自動でサイズが計算され
利用されています。
最悪1Gのファイルマッピングを行う場合最悪100Mのページ
化プール領域が必要ですが。 そのサイズの空は通常
システム搭載のRAMに比例して自動決定されます。
(PagedPoolSize,NonPagedPoolSize)
通常実メモリーから自動計算されるので結果実メモリー
に依存することになります。
以下にありますが、OSの改善によりできるサイズが拡大
されてはいますが。 すべてのWindowsではありません。
http://msdn.microsoft.com/msdnmag/issues/01/12/XPKernel/
プールに空きがプログラム動作時に空きあれば動作するし
なければ動作しません。
度々のご回答、どうもありがとうございます。
大ざっぱに言えば、実メモリのサイズがページ化プール領域と非ページ化プール領域のサイズに影響を及ぼし、そしてプール領域のサイズがマッピングできるファイルのサイズ(あるいはビューのサイズ、またはその両方)に影響を及ぼす、という仕組みですね。
細かい数値の計算方法についてはよく理解できていない部分もありますが、仕組みについてはよく分かりました。どうもありがとうございました。
度々のご回答、どうもありがとうございます。
大ざっぱに言えば、実メモリのサイズがページ化プール領域と非ページ化プール領域のサイズに影響を及ぼし、そしてプール領域のサイズがマッピングできるファイルのサイズ(あるいはビューのサイズ、またはその両方)に影響を及ぼす、という仕組みですね。
細かい数値の計算方法についてはよく理解できていない部分もありますが、仕組みについてはよく分かりました。どうもありがとうございました。