1. ホーム
  2. c

[解決済み] フリーは、どのように無料化を知っているのですか?

2022-03-20 07:33:16

質問

C言語プログラミングでは、freeの引数に任意のポインタを渡すことができますが、freeは割り当てられたメモリのサイズをどのように知るのでしょうか?ある関数にポインタを渡すときは必ずサイズも渡さなければなりませんが(例えば10個の要素を持つ配列は、パラメータとして10を受け取らなければ配列のサイズがわかりません)、free関数にはサイズを渡す必要がありません。これと同じテクニックを自分の関数で使えば、配列の長さという余分な変数を持ち歩く必要がなくなるのでしょうか?

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

を呼び出すと malloc() は、確保するメモリ量を指定します。実際に使用されるメモリ量はこれより少し多く、ブロックの大きさを(少なくとも)記録する余分な情報が含まれています。この他の情報には(確実に)アクセスできませんし、アクセスする必要もありません :-)。

を呼び出すと free() は、単にブロックの大きさを調べるために余分な情報を見るだけです。