9

現在、私はTCube配列を持っています

CreateCube : array[1..1000] of tcube;

現在それらをマップとして使用しているため、幅が 30 キューブ、高さが 20 キューブで、大きなグリッドが作成されます。しかし、1000 個のキューブでは実際には十分ではありません。10,000 個のキューブがもっと必要です。

このサイズのアレイを使用すると、今後問題が発生しますか? 他のオプションはありますか?

4

3 に答える 3

16

大規模な配列で問題が発生する主なシナリオは 2 つあります。

  1. 配列が大きすぎて、連続したメモリ ブロックに収まりません。配列が値ではなく参照を保持している場合、配列には十分なメモリがありますが、参照されるオブジェクトには十分なメモリがありません。
  2. 配列がローカル変数として宣言されているため、スタック オーバーフローが発生します。この問題を回避する方法は、配列をヒープに移動することです。Delphi でこれを行う最もクリーンな方法は、配列を動的配列にすることです。コンパイル時に次元がわかっている場合でも、動的配列を使用してストレージをスタックからヒープに移動できます。
于 2013-07-30T09:22:59.943 に答える
5

配列は、メモリが許す限り大きくすることができます。ただし、それがローカル変数である場合、または何らかのメソッドにで渡す場合は、注意してください。簡単にスタックから抜け出すことができます。

于 2013-07-30T09:23:37.557 に答える
2

適切なデータ構造を選択することは、私がアドバイスできることだけです。その多くは、アレイがどのように取り込まれるかによって異なります。スパース配列は、配列が大きくてもデータが少ない場合にうまく機能する可能性があります。

個人的には、TCube インスタンスを含むようにカスタム リスト クラスをコーディングします。これには、配列よりもいくつかの利点があります。まず、メモリを動的に消費します。次に、アプリケーションに合わせてこのクラスにメソッドを追加できます。

于 2013-07-30T09:36:59.987 に答える