なぜ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倍大きくなります)。しかし、一般にスタックは非常に小さく、大きな割り当て、特に再帰関数でオーバーフローします。
関連する問題
- 1. c#配列宣言構文vs C++配列宣言構文
- 2. 大規模配列のグローバル宣言はどのようにC言語で動作するのですか?
- 3. C言語の宣言時に2次元配列を初期化する
- 4. 構造体をC言語で宣言せずに宣言する
- 5. C charの配列を宣言する*
- 6. Jプログラミング言語での配列言語
- 7. cの文字列配列宣言
- 8. xdocumentでxml宣言をC言語で取得する#
- 9. グローバル配列の宣言と使用c#
- 10. 宣言的言語のXSLT
- 11. Objective-Cで2D配列を宣言するには?
- 12. Cで文字配列へのポインタを宣言するには?
- 13. 大規模配列の宣言時にOutOfMemoryExceptionが発生する
- 14. 配列の型宣言
- 15. c言語+ 2次元配列
- 16. C言語の2次元配列
- 17. Objective-Cのスタックベースの配列宣言ですか? Objective-Cで
- 18. Javaのlong []配列を宣言する
- 19. 配列を2回宣言する(C99)
- 20. ポインタオブジェクトの2D配列を宣言する
- 21. C++ - 関数内で配列を宣言する
- 22. C#で配列を宣言して使用する方法
- 23. "スクリプトタイプ"宣言と "スクリプト言語"宣言の相違
- 24. 配列宣言文字列を書く
- 25. ポインタの配列にアクセスするためのC++ポインタ宣言
- 26. Javaでバイト配列の配列を宣言する
- 27. 宣言的なプログラミング言語をgrokkingするためのヒント?
- 28. 配列を宣言する際にC++コードをC#に変換する
- 29. GNU C++での文字列配列の宣言
- 30. 多次元配列をC言語で格納する
ヒント:このサイトは何と呼ばれていますか? :) – Joni