なぜC言語で膨大な配列をローカルに宣言するのは良いのですか?例:int a [1000000];C言語で巨大な配列をローカルに宣言する
6
A
答えて
5
ローカルで宣言するとスタック上で宣言されるため、スタックが大きすぎるとスタックオーバーフローが発生し、プログラムがクラッシュします。
6
彼らがスタックに移動し、スペースの限られた量は、スタック上に存在するため、
0
それはある程度事前にスタック空間を調整することが可能ですが、1にも可能性を考慮する必要があります同じ機能を実行パスからその機能に呼び出すこと。たとえば、次のようになります。
void a() { int a[10000000]; b(); }
void b() { d(); c(); }
void c() { a(); }
この分析は必ずしも直接的なものではないため、オーバーフローが発生する可能性があります。
はポインタと幸運に注意して、
2
スタック(4キロバイト程度)小さいが、ヒープは、マシン上で複数のサイズの変異体を有する動的にmalloc()をintに ポインタを使用して配列を割り当てるさ
0
スタックとヒープは任意のサイズにすることができます(実装がそのように設定すると、スタックはヒープよりも100倍大きくなります)。しかし、一般にスタックは非常に小さく、大きな割り当て、特に再帰関数でオーバーフローします。
関連する問題
ヒント:このサイトは何と呼ばれていますか? :) – Joni