Dev C 内で 4200000 double などの巨大なサイズの配列を宣言しようとすると、ユーザーは予期せぬ問題に遭遇する。コンパイラはエラーにフラグを立てない場合がありますが、プログラムは実行時に突然終了します。さらに、この苦境はかなりのサイズの配列でのみ発生しますが、より小さい次元の配列は完璧に機能します。
このような大きな配列をスタックに割り当てることには固有の欠点があるにもかかわらず、シミュレーション特有の要求により、要素に直接アクセスする必要があります。効率的な計算のために。これは問題を引き起こします。前述のハードルを回避する方法で、この配列をスタック上で宣言できるでしょうか?
残念ながら、答えはノーです。スタック上で配列を宣言することは実行可能なオプションではありませんが、スタックとヒープの両方の要素を組み合わせるソリューションが存在します。
double *n = new double[4200000];
このアプローチを使用すると、ポインター n がスタック上で宣言されます。一方、配列のメモリはヒープ上に割り当てられます。その後、このメソッドを使用した n[234] へのアクセスは、次のように宣言された配列内の n[234] へのアクセスと区別できなくなります:
double n[500];
パフォーマンスを向上させるために、ベクトルを使用できます:
std::vector<int> someElements(4200000); someElements[234];
さらに、-O3 で最適化すると、ベクターはより安全で同等に効率的になります。
動的にメモリを割り当てる別の方法を使用します:
double *n = new double[4200000];
明示的にメモリの割り当てを解除することが重要です:
delete[] n;
これを行わないと、メモリ リークが発生し、不安定になる可能性があります。したがって、この手法は、特に例外やその他の複雑さを処理する場合、本質的に安全ではありません。
以上がC のスタック上で大きな配列を宣言できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。