>>312

union malloc_unit {
    unsigned char size[0x04];    // unsigned long    // 4byte
    
    unsigned char[0x0C];    // 12byte
};


だとしたら、
■ = malloc_unit = 12byte

p0 p1 p2
↓  ↓ ↓
■■■■■■
  ↑ ↑
  | p2_size
  |
  p1_size

(p0は最低でも16バイト以上必要、p1は最低でも1バイト以上必要、p2は最低でも1バイト以上必要)

p1 - p0 = 12 * (2 + 1) = 36byte
p2 - p1 = 12 * (1 + 1) = 24byte

こうなるかと思ってましたが、
実際にはもっとメモリ使用量を節約できるように、size は4byte、block は12byte と、単位が異なるようですね。
これだと、メモリ領域を未使用領域として再設定する場合など、フラグ関係をどこでどのようにやっているのか想像つきません。
管理用にわざわざ別テーブルを用意するなら、管理情報もふくめて、共用体としてサイズ等のヘッダに項目を作ってしまった方が単純で良いような気が。はて?