6

Cで巨大な配列をローカルに宣言するのが良くないのはなぜですか? 例: int a[1000000];

4

5 に答える 5

6

それらはスタックに配置され、スタックには限られたスペースしかないため、

于 2013-03-17T22:41:02.273 に答える
5

ローカルで宣言するとスタック上で宣言されるため、スタックが大きくなりすぎるとスタックオーバーフローが発生し、プログラムがクラッシュします。

于 2013-03-17T22:40:45.080 に答える
2

スタックは小さい (約 4kb) ですが、ヒープはマシン上でより多くのサイズのバリアントを持ち、int malloc() へのポインターを使用して配列を動的に割り当てます。

ポインタと幸運に注意してください

于 2013-03-17T22:46:47.173 に答える
0

スタックとヒープは任意のサイズにすることができます (実装がそのように構成されている場合、スタックはヒープよりも 100 倍大きくなる可能性があります) が、一般的にスタックは非常に小さく、特に再帰関数では大きな割り当てでオーバーフローします。

于 2013-03-17T22:52:17.760 に答える
0

事前にスタック空間をある程度調整することは可能ですが、関数を介して実行パスから同じ関数を呼び出す可能性も考慮する必要があります。例えば:

void a() { int a[10000000]; b(); }
void b() { d(); c(); }
void c() { a(); } 

この分析は必ずしも簡単ではないため、オーバーフローが発生する可能性があります。

于 2013-03-17T22:44:25.500 に答える