@startuml
scale 600 height
top to bottom direction
skinparam backgroundColor transparent
skinparam shadowing false
skinparam defaultFontName Monospace
skinparam defaultFontSize 10
skinparam stateBorderColor #2c7794
skinparam stateBackgroundColor #edf6fa
skinparam ArrowColor #8095a1
title A6 STATE — block state and heap statistics

[*] --> Free : 01 one list node
Free --> Allocated : 02 first-fit + split\ncurrent free decreases
Allocated --> Fragmented : free A and C
Fragmented : 03 two free blocks
Fragmented : sum free > largest block
Fragmented --> Coalesced : free B\naddress-order joins neighbours
Coalesced : 04 one free block
Coalesced : current free = initial free
Coalesced --> OOMChecked : request > arena
OOMChecked : NULL + hook once
OOMChecked --> [*]

state "05 minimum-ever" as MIN
Allocated -right-> MIN : records low watermark
Fragmented -right-> MIN : does not rise
Coalesced -right-> MIN : history remains
@enduml
