0

いくつかのアレイを新しくした場合は、それを削除する必要があることを知っています。

    int *i=new i[10];

    delete[] i;

静的配列はどうですか?

    int i[100];

また

    int i[]={1,2,3,4};

削除する必要がありますか?

次のコードを想定します。

    bool fu()
    {
      for(int i=0;i<100;i++
      {
       int j[]={1,2,3,4};
      }
      return 0;
    }

j []はRAMから離れますか(0;を返した後)、それともそこに残り、何度も繰り返した後、RAMをいっぱいにしますか?

私はマイクロイムでプログラムしたいので少し心配。ありがとう

4

5 に答える 5

3

それらを削除する必要はありません。それらはヒープではなくメモリ内のスタックにあり、スコープを離れるとすぐにクリアされます。

そしてあなたの例では:ループを離れるとjはクリアされます。

于 2013-02-07T08:33:43.163 に答える
3

次のような静的配列はどうですか:

int i[100];
int i[]={1,2,3,4};

削除する必要がありますか?

いいえ...staticデータ(これらのような定義が関数スコープの外にあるときに使用される)とスタックベースのデータ(関数内の変数に使用される)の両方が、プログラムが終了するかスコープが終了すると、(必要に応じて)それぞれ自動的に破棄されます。変数のメモリはstatic、プログラムによって明示的に「解放」される必要はありません。プログラムが終了すると、オペレーティング システムがメモリを解放します。スタック メモリは、浜辺の波に少し似ています... スコープに出入りすると、同じメモリ (浜辺の領域を考えてください) が使用され (カバーされ)、自動的に解放されてから再利用されます....

bool fu()
{
  for(int i=0;i<100;i++
  {
   int j[]={1,2,3,4};
  }
  return 0;
}

ここでj[]は、スタック上に再作成されます - おそらくループを通過するたびに同じアドレスになりますが、C++ 標準ではそのような実装の詳細については説明されていません - しかし、{1, 2 である定数 (静的) 配列からデータを再コピーすることによって再初期化される場合があります。 、3、4}はその目的のために保存されます。(オプティマイザーが変更しないと判断した場合、再初期化をスキップするか、スタック変数を削除して定数配列の値に直接アクセスするか、定数配列を削除して、アクセスされた特定の値をマシン コード オペコードの即値に移動することさえあります。オプティマイザーは、プログラムのパフォーマンス以外に影響を与えない限り、ほとんど何でもできます)。

于 2013-02-07T08:37:22.537 に答える
2

いいえ、通常、スタック上の変数は削除しないでください。

于 2013-02-07T08:33:43.473 に答える
1

http://www.learncpp.com/cpp-tutorial/79-the-stack-and-the-heap/を見て、質問の説明を見つけてください。

于 2013-02-07T08:40:38.570 に答える
1

このように「静的」配列を宣言している場合は、

static int i [100];

100個の整数に割り当てられたメモリは、プログラムの存続期間中残ります。しかし、これのために、

int i [100]

これがスコープ外になる間、メモリは解放されてスタックから外れます(これはローカルであるため)。

于 2013-02-07T08:41:48.790 に答える