2011-10-21 8 views
0

これは、size_tが必要な理由について、my previous questionへのフォローアップです。 size_tのは、あなたが(まだsize_t型よりも大きく、いくつかの整数が存在することができるという意味)を割り当てることができ、メモリのブロックの最大サイズを表現するのに十分な大きさが保証されていることを、私の質問は考えるどのくらいのメモリを割り当てることができますか?

...

何一度に割り当てることのできる量を決定します。

+0

あなたの質問にした修正を見てください。 – xanatos

+1

OS。コメントは十分に長くなかったので、これらは単なる余分な文字です。 –

+0

@xanatosだから、size_tは実際にはそれが必要であるよりも大きくなる可能性がありますか? –

答えて

3

マシンのアーキテクチャ、オペレーティングシステム(2つは絡み合っています)、およびコンパイラ/ライブラリのセットによって、一度に割り当てることができるメモリの量が決まります。

malloc OSが彼に与えることができるすべてのメモリを使用できるようにする必要があります。 OSはは、マシン内のすべてのメモリが存在し利用できるようにするを必要としない(例えばWindows Serverのさまざまなバージョンでは、さまざまな最大メモリfor licensing reasonsを持っている)

しかし、OS より利用可能にすることに注意してくださいマザーボードで許可されているメモリよりもさらに多くのメモリを搭載しています(マザーボードには1GBのメモリスティックのみを受け入れるメモリスロットが1つあり、Windowsはプログラムで2GBのメモリを割り当てることができます)。これは、仮想メモリ、ページング(あなたが知っているスワップファイル、あなたの古くて遅い友人:-)の使用を通じて、またはたとえば、NUMAの使用を通じて行われます。

+0

メモリの断片化もその値に影響します。 – xappymah

+0

@xappymahもっと複雑です...アロケーションスペースの断片化(保護モード)は、通常、実際のメモリの断片化よりもはるかに早い時期に影響を与えます。 3GBのRAMを搭載したWin 32では、2GBの単一ブロックを割り当てることは不可能であり、5〜700MBの単一ブロックを割り当てることも非常に複雑です(これは、CDのISOをmmapしようとしたためです) – xanatos

0

私は実際のコードでは、3つの制約を考えることができます。

  • 最大のunsigned int型size_tのは、割り当てることができます。 size_tは、OSのメモリ割り当てメカニズムが使用しているのと同じタイプ(同じサイズなど)でなければなりません。
  • オペレーティングシステムがRAMで扱える最大のブロック(ブロックのサイズはどのように表されていますか?この表現が最大ブロックサイズにどのように影響するか)。
  • メモリ断片化(最大の空きブロック)と使用可能な空きRAMの合計。
+0

プロテクトモードでの 'メモリ断片化(最大フリーブロック)'は、利用可能な仮想アドレス空間の最大規模です。 – xanatos

関連する問題