2012-04-30 8 views
3

実行ファイルがどのようにメモリ内にレイアウトされているかを私が理解しているので、画像はあなたのアプリケーションからアクセス可能なメモリを表す正方形のボックスです。なぜスタックはオーバーフローしますか?

プログラムコードはメモリの最下部にあり、スタックはプログラムコードのすぐ上の場所に割り当てられ、上向きに割り当てられます。ヒープはメモリの先頭から始まり、下方向に割り当てられます。

この場合、なぜスタックメモリよりも多くのヒープメモリを割り当てることが可能ですか?

答えて

3

多くの仮想メモリを使用できる最新のシステムでも、コールスタックの最大サイズは通常、意図的に1MBに制限されているためです。

これは通常、基本的な制限ではありません。これを変更することができます(Linuxではsetrlimit()、Javaでは-Xss flagなどを使用)。しかし、そうする必要があるのは通常、異常なプログラムであることを示しています。大規模なデータセットを持っている場合は、通常はヒープに格納する必要があります。

関連する問題