重複の可能性:
mallocが割り当てることができる最大メモリ!
占有できるヒープの最大サイズを知るにはどうすればよいですかmalloc()
。私はMSVisualStudio2010を使用しています。
重複の可能性:
mallocが割り当てることができる最大メモリ!
占有できるヒープの最大サイズを知るにはどうすればよいですかmalloc()
。私はMSVisualStudio2010を使用しています。
プロセスで使用可能な仮想メモリの量を確認する方法はオペレーティングシステムに依存しますが、Windowsでこれを行う方法がわかりません。ただし、ハント+半分の検索を実行し、失敗するまでさらに大きな引数を使用してmallocを調整し、それが失敗する値にホーミングすることで、それを見つけることができます。何かのようなもの
for(i=1; v=malloc(i); i<<=1) free(v);
この時点で、i / 2バイトは問題ないが、iバイトは問題がないことがわかります。次に、実際の最大値を二分検索します。
for(a=(i>>1), b=i; a < b-1;)
{
c=(a+b)>>1;
if(v=malloc(c)) { a=c; free(v); }
else b=c;
}
この時点で、a
は正常に割り当てることができる最大量です。
さて、なぜその議論を見てみませんかsize_t
...。したがって、次の範囲で何でも割り当てることができますsize_t
(同様に機能しますが、とにかくSIZE_MAX
基づいており、そうでない場合でも、署名は引き続き対処する必要があります)。size_t
malloc
あなたの質問は少し不明確ですが、実際に最大ヒープサイズを尋ねている場合、理論的には、ネイティブポインタサイズによって決定されます。たとえば、32ビットシステムでは、ポインタは0から2 ^ 32-1までの任意のアドレスを保持できます(もちろん、アドレス0は一般的に有効ではありません)。
もちろん、実際には、考慮しなければならない詳細があり、それらのほとんどはOS固有です。マシンにはどのくらいの物理メモリ(RAM)がインストールされていますか?OSが仮想アドレスを使用している場合、物理RAMによる制限がなくなるため、状況が複雑になります(ただし、ページングが絶え間なく行われると、パフォーマンスが低下します)。
プログラムが特定のプラットフォームに割り当てることができる量を考えるときに、仮想アドレス空間がどのように機能するかを理解するのに役立ちます。