次のような静的配列はどうですか:
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}はその目的のために保存されます。(オプティマイザーが変更しないと判断した場合、再初期化をスキップするか、スタック変数を削除して定数配列の値に直接アクセスするか、定数配列を削除して、アクセスされた特定の値をマシン コード オペコードの即値に移動することさえあります。オプティマイザーは、プログラムのパフォーマンス以外に影響を与えない限り、ほとんど何でもできます)。