@startuml
scale 620 height
top to bottom direction
skinparam backgroundColor transparent
skinparam shadowing false
skinparam defaultFontName Monospace
skinparam defaultFontSize 10
skinparam classBorderColor #2c7794
skinparam classBackgroundColor #edf6fa
skinparam ArrowColor #8095a1
title A2 STRUCTURE — in-band metadata and address order

class "01 Block header" as HEADER {
  next : BlockLink_t*
  size : size_t
}
class "Allocated block" as ALLOC {
  02 header + 13 byte request
  aligned total = 32 bytes
  payload begins after header
}
class "03 Free remainder" as REM {
  own header
  size = 224 bytes
}

HEADER *-- ALLOC : precedes payload
ALLOC -down-> REM : split preserves 256

class "04 Address-ordered free list" as LIST {
  previous < inserted < current
}
class "05 Right neighbour" as RIGHT {
  block + block.size == current
}
class "06 Left neighbour" as LEFT {
  previous + previous.size == block
}

REM -down-> LIST : insert by address
LIST -down-> RIGHT : join first
RIGHT -down-> LEFT : then join left

note right of LIST
Ordering makes both physical
neighbours locally visible.
end note
@enduml
