0

これは、 size_tが必要な理由についての私の以前の質問のフォローアップです。

size_tは、割り当てることができるメモリブロックの最大サイズを表すのに十分な大きさであることが保証されていることを考えると(つまり、size_tよりも大きい整数が存在する可能性があります)、私の質問は...

一度に割り当てることができる量を決定するものは何ですか?

4

2 に答える 2

3

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

mallocOSが彼に与えることができるすべてのメモリを使用できる必要はありません。OSは、マシンに存在するすべてのメモリを使用可能にする必要はありません(たとえば、Windows Serverのさまざまなバージョンでは、ライセンス上の理由から最大メモリが異なります) 。

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

于 2011-10-21T14:05:04.140 に答える
0

実際のコードでは、次の3つの制約について考えることができます。

  • 最大のunsignedintsize_tは割り当てることができます。size_tは、OSのメモリ割り当てメカニズムが使用しているのと同じタイプ(同じサイズなど)である必要があります。
  • オペレーティングシステムがRAMで処理できる最大のブロック(ブロックのサイズはどのように表されますか?この表現は最大ブロックサイズにどのように影響しますか?)。
  • メモリの断片化(最大の空きブロック)と使用可能な空きRAMの合計。
于 2011-10-21T14:08:11.803 に答える