2016-07-14 10 views
1

mallocを使って膨大なメモリ(100MB)を割り当てる小さなcコードのスニペットを書きました。一度割り当てられると、各ページの先頭に2バイト、各ページの末尾に1バイトが書き込まれ、物理メモリーが確実にコミットされます。書き込み後、割り当てられたメモリがRAMに常駐していることを確認するためにスリープ状態になります。malloc膨大な量のデータをラムに埋め込んで空きのパラメータを観察する

別の端末では、アプリケーションの実行前後で「フリー」コマンドの出力を記録します。私は自由なコマンドの出力で "自由"なパラメタにあまり変化がないのを見ます。巨大なデータをmallocすると、まさに何が起こりますか?私はフリーパラメータの値が使用されるパラメータを下げて増加することを期待していました。しかし、それは起こっていない。私は何かが欠けている。

要するに、一度に大きなチャンクをmallocして、割り当てられた各ページに数バイトを書き込むと、使用可能な空き物理メモリから割り当てられますか?

+1

質問に追加してください:実際のコマンド出力。正確にあなたが質問する値。あなたが答えを期待したものとまったく同じです。なぜ。 ###ちなみに、おそらくあなたの悩みのために得たものは、ページフォールトの全体の束でした。すべてのOSは、プロセスが保持することができる物理ページの数に制限を課すため、悪意のある* *プログラムはあなたのものとまったく同じです*(BTW、私は**今は悪意を持っていません! ")、*これにより、あまりにも多くのリソースを吸収してサービス拒否を引き起こすことはできませんでした。 –

+0

@mikerobinson:私のマシンでは、mozillaは一貫してその20倍のメモリを使います。しかしおそらく、それは「悪意のある」と言うことができます。 – rici

+0

Mozilla ... * koff *私たちはそこに行く必要はない... **; - )** –

答えて

1

要するに、一度に大きなチャンクをmallocして割り当てられた各ページに数バイトを書き込むと、空き物理メモリから割り当てられますか?

割り当てられている場合は、システムの仮想メモリから割り当てられ、割り当ての任意のページは、任意の時点で物理メモリに常駐している場合とされていない場合があります。それが仮想メモリシステムの仕組みです。あなたのプロセスが眠っている間、それに属するメモリはページアウトの良い候補ですが、実際にページアウトされるかどうかを予測することは難しいです。

+0

物理RAMリソースが混雑し始めると、システムは常に「盗むページを探しています」。たぶん、他の誰かの*最近使われていないページがキャベツになるかもしれない。しかし、おそらくそうではありません!システムが「現在のプロセスの常駐ページの最大数」のために課された現在の制限を超えると、あなたの*ページの1つが盗まれます! (あなたは「あなたの公平な分担以上」を取ることは許されません)。この制限は動的調整の対象となります。 –