1. ホーム
  2. c++

[解決済み] C++, フリーストアとヒープ

2022-05-17 17:37:18

質問

動的アロケーションで new/delete が行われると言われています。 フリーストア ,

一方 malloc/free の操作では ヒープ .



実際に違いがあるのかどうか、実際に知りたいです。

コンパイラはこの2つの用語を区別しているのでしょうか?( フリーストア ヒープ ではなく new/malloc )

どのように解決するのですか?

参照 http://www.gotw.ca/gotw/009.htm ヒープとフリーストアの違いについて、私よりもずっとうまく説明してくれています。

フリーストア。

フリーストアは、2つの 動的メモリ領域で、new/deleteによって割り当て/解放されます。 を行います。 オブジェクトの寿命は ストレージが割り当てられた時間よりも短くすることができます。 つまり、フリー・ストア・オブジェクトは つまり、フリー・ストア・オブジェクトは、すぐに初期化されることなく、メモリが すぐに初期化されることなくメモリを確保することができ、また 破壊されても、メモリがすぐに解放されることはありません。 即座にメモリが解放されることなく破棄することができます。 ストレージが確保されている間 ストレージが割り当てられている期間 ストレージが割り当てられるが、オブジェクトのライフタイム外である期間、その ストレージにアクセスすることができる。 ストレージにアクセスし、操作することは可能であるが プロトオブジェクトの非静的メンバやメンバ関数を使用することはできません。 メンバやメンバ関数にアクセスすることはできません。 アクセスしたり、そのアドレスを取得したりすることはできません。 または他の方法で操作されることはありません。

ヒープです。

<ブロッククオート

ヒープはもうひとつの動的メモリ領域です。 領域で、malloc/free によって割り当て/解放されます。 とその派生型によって確保/解放されます。 一方 デフォルトのグローバルな新規作成と削除は が実装されているかもしれません。 コンパイラによって、mallocとfreeで実装されるかもしれません。 コンパイラで実装されるかもしれませんが,ヒープが と同じではなく、ある領域で確保されたメモリは に割り当てられたメモリを安全に解放することはできません。 ヒープとフリーストアは別物であり、一方の領域で確保したメモリを他方で安全に解放することはできません。ヒープから割り当てられたメモリは ヒープから割り当てられたメモリは、クラス 型のオブジェクトに使用することができます。 明示的な破壊 そのように使用された場合 フリー・ストア・オブジェクトの寿命に関する注意事項 はここでも同様に適用されます。