49 lines
1.1 KiB
Plaintext
49 lines
1.1 KiB
Plaintext
@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
|