0

おそらく、これは非常に基本的な質問ですが、とにかくここに行きます。サイズが 10 の配列があります。しかし、その配列に整数を割り当てている間、8 つの要素しか与えません。使用されていない 2 つの要素のメモリを解放できますか?

4

2 に答える 2

1

そもそもアレイをどのように入手したかによります。

自動ストレージまたは静的ストレージ(つまり、ローカルまたはグローバル)に割り当てられているアレイの場合、何も割り当てていない(コンパイラーが自動的に行った)ため、解放できるものはありません。

これが動的に割り当てられた配列である場合、8つの要素のみで小さな配列を作成し、元の値をその配列にコピーしてから、元の配列を解放することで、同じ効果を得ることができます。これは、8要素配列のアロケータがより多くの要素にスペースを割り当てることができるため、プログラムに割り当てられるメモリの量が必ずしも減少することを保証するものではありません。一方、数値が10000と8000の場合、ほぼ確実にある程度の節約が得られます(ただし、標準ではそれも保証されていません)。

于 2012-08-15T21:04:37.583 に答える
1

いいえ、できません。動的割り当ての場合、またはで割り当てられたメモリのみをfree実行deleteできmallocますnew。まったく同じポインタでまったく同じ量。自動変数の場合、メモリは自動的に解放されます。

ただし、これはC ++なので、std::vector代わりに使用してください。お願いします。

于 2012-08-15T21:03:42.710 に答える