none
ヒープメモリの確保について RRS feed

  • 質問

  •  

    VisualC++の問題ではないと思いますが、VC6で単純にヒープメモリを500MB単位で確保するプログラムを作成し、

    Windows2000(実装メモリ384MB)のPCと、WindowsXP(実装メモリ2GB)のPCで動作させたところ、

    Win2000の方では6個(=1.5GB)確保できましたが、

    WinXPの方では4個(=1.0GB)しか確保出来ませんでした。

    同じアプリケーションなので、Windowsバージョンの違いに起因する違いと思いますが、

    理由をご存知の方がいらっしゃったら教えてください。

     

    2008年5月15日 12:56

回答

すべての返信

  • このあたりのスレッドが参考になりますか?

    http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=3208148&SiteID=7

     

    Windows 2000とXPでカーネル他が違うので、メモリの使われ方、断片化の具合も異なります。

    その辺が影響しているのではないかと。

    2008年5月15日 13:52
    モデレータ
  • 回答ありがとうございます。

    断片化も考えたのですが、同じソフトを複数実行した場合、2個目3個目でも同じ容量の確保が可能です。

    (元のメッセージで500MB単位と書きましたが、250MB単位の間違いでした)

    XPの方は、1個目で250MB*4=1GB確保でき、2/3個目でも同様に1GB確保できます。

    断片化が起因しているのであれば、2/3個目のプロセスは同じように確保できないのでは思うのですが。

     

    2008年5月16日 4:42
  • プロセスごとにメモリ空間は独立していますから。

    あるプロセスのメモリが断片化しまくっていても、他のプロセスには関係ありません。

    2008年5月16日 5:06
  •  xylish さんからの引用

    断片化が起因しているのであれば、2/3個目のプロセスは同じように確保できないのでは思うのですが。

    Hongliangさんが既に述べられていますが、もう一度。

     

    32bitなWindowsでは、1プロセスが使えるメモリ空間(の内、ユーザ領域とされるの)は通常2GBになっています。

    これは1プロセスごとの制限であり、メモリ空間内の断片化もそのプロセスでのみ発生します。

    また、OS全体の仮想メモリの限界もあり、ページファイルのサイズや物理メモリのサイズによって変動するはずです。

     

    そのため、1プロセス目で限界個数を確保しても、2プロセス目で同じ数確保できることもありますし、N番目のプロセスでは全く確保できないか、確保できる数が減ることもあります。

    2008年5月16日 16:12
    モデレータ