• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:メモリの増加に関して)

メモリ増加に関する疑問

このQ&Aのポイント
  • static変数で大きな配列を取得し、任意の位置に値を入れると、メモリ使用量が増える
  • C言語ではメモリをリニアに取得するが、拡張子や環境により異なるように見える
  • メモリダンプで確認すると、使用メモリの増加が確認できる

質問者が選んだベストアンサー

  • ベストアンサー
noname#208124
noname#208124
回答No.1

それはもう言語を越えたCPUとOSの実装の話になります C言語での静的変数は確かに仮想メモリ内では全て確保済みに見えます しかしOSは全部まとめてゼロページという内容が全部0の物理メモリに結びつけます だって言語規格的にも0ですから 書き込まれるまでの読み取りは0が返ればいいんです 書き込みが起きたときにそれを検知し初めてOSはメモリを確保してその物理メモリをプロセスの仮想メモリに結びつけます この仕組みはdemand zero faultとかDemand Pagingとか呼ばれますがやっているのはWindowsだけじゃありません 必要になるまでメモリの確保要りませんから起動の高速化などの利点がありますからサーバー用途、デスクトップ用途のOSはみんなやってます 次に仮想メモリと物理メモリを結びつける仕組みとしてページング方式ってのがあります 1バイト毎に結びつけると管理領域が馬鹿にならないのでOSとCPUはこれをいくらかまとめて管理します これをページと呼び、普通のWindowsが動くx86 CPUでは通常は4KBを1ページとして管理します ページ毎に管理している以上仮想メモリに結びつけたらその1ページサイズの物理メモリは確保済みになります なのでwork_static_momory[0]に書き込みを行ったらwork_static_momory[4095]まではメモリの確保は行われません

xionggu
質問者

お礼

回答ありがとうございます。 OS介在の話になるわけなんですね。 アセンブラにて確認しても理解できなかったのが事実なのですが、 OSはアセンブラプログラムをエミュレートして動作させていると いうことなんですね。WindowsOSは何処まで何をしているかとても 興味深く感じております。

関連するQ&A