2011-06-23 11 views
0

重複の可能性:すべての動的なメモリ割り当てのために
How does delete work in C++?
C programming : How does free know how much to free?「無料/削除」はどのように機能しますか?

'のmalloc /新しい' を使用して、我々はメソッドを持って、割り当てられたメモリを解放するために '自由/削除します' 。

私の質問は、メモリ割り当てサイズが実行時に決められ、メモリ位置が連続していない場合、どのようにこれらのメモリ解放メソッドが空きメモリ量を知っているのか、そしてクリアするメモリ位置は?

単一の場所へのポインタのみを渡すと、これらの機能は機能しますか?

+1

私はこれを重複したものとしてマークしましたが、その質問の一般的な内容を強調するためです。 –

答えて

0

内部で割り当てられたメモリ量を記録します。

0

malloc/newがメモリを割り当てるとき、指定されたメモリ位置へのポインタのために割り当てられたメモリの場所と量も記録されます。 free/deleteは、ポインタを与えるときにどのメモリを解放するか調べます。

"+ ="などで移動したポインタを決して解放しないでください。

+0

「テーブル」は必要ありません。たとえば、返されるアドレスの直前など、チャンクにチャンクのサイズを格納し、ヒープをそのようなチャンクのリンクされたリストとして考えることは可能です。そのようなものを追跡する実際の方法は、実装依存性が高く、malloc/newから得たもの以外のポインタを解放/削除する未定義の動作の理由の一部です。 – cHao

関連する問題