0

現在、構造体の配列に少し問題があります (具体的には、配列が大きすぎて 7 メガバイトのメモリを占有します)、すべての構造体を一度に宣言する必要があるかどうか疑問に思い始めています。そして、新しい構造体が必要になると比例してメモリを増やすのではなく、そのようにメモリを占有します(プログラムはファイルからデータを読み取り、ファイルからデータを構造体に保存します;しかし、ファイルから読み取る必要があるものの数は予測不能です)。プログラムが個々の一意の構造体を参照できるが、事前に構造体の正確な数を必要としないようにするには、どのような代替手段を使用できますか?

4

3 に答える 3

2

リンクされたリスト?または、目的に応じて、他のより高度なデータ構造ですが、いずれにせよ、いくつかの読み取りが適切であるようです:)または、C++を使用している場合は、std::listを使用してください。

于 2012-05-27T22:37:33.100 に答える
1

次の 2 つの方法が思い浮かびます。

  • 再割り当て可能な配列(構造体または構造体へのポインターの可能性があります)、境界の外に出ているかどうかを確認し、場合に備えて配列全体を再割り当てする関数が必要です( with realloc
  • 構造体のリンクされたリスト、必要に応じて自動的に拡張されます。挿入と削除は一定ですが、要素の高速ランダム アクセス インデックスはありません。

リンクされたリストソリューションの場合、別の構造体が必要になるだけです

struct node
{
  struct node *prev; // if you want it double linked
  struct node *next;
  struct data data;
};

どちらを選択するかは、主に新しいアイテムをデータ構造に追加する必要がある頻度に依存します。バッチで行われる場合、再割り当ては非常に効率的です。そうでない場合は、多くの再割り当てを行います (常に次のようなアプローチを使用できます)。ハッシュマップに使用されるものであり、容量を 2 倍にするなど、常に大量にインクリメントします)。高速なランダム アクセスが必要な場合は、リンク リストを忘れてください。

于 2012-05-27T22:38:04.717 に答える
-1

unionの代わりに を使用できますstrust。メモリ効率がはるかに高く、 のようにメモリを占有しませんstruct

于 2012-05-28T04:39:41.253 に答える