CおよびC++は、、、、およびこれらの一部の兄弟などmalloc
のパブリックインターフェイス以外の「ヒープ」がどのように機能するかを定義していません。各コンパイラ/ライブラリベンダーは独自に作成します(もちろん、コンパイラスイートの一部ではないライブラリを使用できます。たとえば、gcc MingWはMicrosoftライブラリを大部分使用します)。new
free
delete
1つのヒープ、2つのヒープ、3つのヒープ、または1000のヒープがあるかどうかを心配することがあまり意味がないかどうかはわかりません。コードに関連するいずれかからメモリを割り当てることができる限り、実際には実装の詳細です。多くのヒープがあります-そして、それらの数が重要になるケースはほとんどありません-おそらく、各ヒープにあるわずかな管理オーバーヘッドを除いてです。しかし、誰かが実際にヒープの設計に乗り越えていない限り、それは数十バイト程度のオーダーになります。
他の場所で述べたように、C ++コードは同じヒープを使用する場合と使用しない場合があり、または別個のヒープを持つ場合があります。繰り返しますが、コードに違いはありません。それを解放するときは、割り当てたときと同じ方法を使用します。つまり、new
何かを割り当てたり、free
解放したりするために使用しないでください。これは非常に悪いことです。データが同じヒープからのものであっても、データを追跡するために「隠された」情報が保存されていることに気付くかもしれません。これは、隠されているものとは異なります。つまり、「何が起こっているのかを理解すると、奇妙なクラッシュが発生します!malloc
delete
new
malloc
malloc