Description
Provides variable-size best-fit allocation inside a fixed caller-owned relocatable region. Free blocks are indexed by an in-region AVL tree keyed by size and arena-relative offset. Physical-neighbor sizes support checked splitting and deferred coalescing. Stored metadata contains only fixed-width scalar fields. Allocation and reclamation are serialized across views by one persisted nonblocking guard; immediate allocation reports contention and timed overloads yield between attempts. Payload access does not acquire the metadata guard: the application or receiving data structure must exclude release of a handle from reads, writes, and copies using it. A dead metadata-guard owner leaves the arena locked. An independently authorized supervisor may poison the arena after establishing owner death and whole-arena quiescence; exclusive reinitialization is the only recovery. @exclude
Attach
procedure Attach
(Item : out View;
Region : Region_View;
Location : Region_Offset;
Configuration : Best_Fit_Kernel.Configuration;
Instance_ID : Interfaces.Unsigned_64)
Parameters
- Item
- Region
- Location
- Configuration
- Instance_ID
Attach_Allocation
procedure Attach_Allocation (Region : in out Region_View; Item : View; Value : Allocation_Handle)
Parameters
- Region
- Item
- Value
Block_Capacity
function Block_Capacity (Item : View; Value : Allocation_Handle) return Byte_Count
Parameters
- Item
- Value
Return value
Configuration
type Configuration is record
Usable_Capacity : Positive;
Minimum_Block_Size : Positive;
end record;
Record fields
- Usable_Capacity
- Minimum_Block_Size
Configuration_Minimum_Block_Size
function Configuration_Minimum_Block_Size (Value : Configuration) return Positive
Parameters
- Value
Return value
Configuration_Usable_Capacity
function Configuration_Usable_Capacity (Value : Configuration) return Positive
Parameters
- Value
Return value
Copy
procedure Copy
(Item : View;
Source : Allocation_Handle;
Source_Offset : Byte_Count;
Target : Allocation_Handle;
Target_Offset : Byte_Count;
Length : Byte_Count)
Parameters
- Item
- Source
- Source_Offset
- Target
- Target_Offset
- Length
Create_Or_Attach
procedure Create_Or_Attach
(Item : out View;
Region : Region_View;
Location : Region_Offset;
Configuration : Best_Fit_Kernel.Configuration;
Instance_ID : Interfaces.Unsigned_64;
Result : out Open_Result)
Parameters
- Item
- Region
- Location
- Configuration
- Instance_ID
- Result
Current_Metadata
function Current_Metadata (Item : View) return Metadata
Parameters
- Item
Return value
Destroy
procedure Destroy (Item : in out View)
Parameters
- Item
Detach
procedure Detach (Item : in out View)
Parameters
- Item
Initialize
procedure Initialize
(Item : out View;
Region : Region_View;
Location : Region_Offset;
Configuration : Best_Fit_Kernel.Configuration;
Instance_ID : Interfaces.Unsigned_64)
Parameters
- Item
- Region
- Location
- Configuration
- Instance_ID
Is_Attached
function Is_Attached (Item : View) return Boolean
Parameters
- Item
Return value
Is_Poisoned
function Is_Poisoned (Item : View) return Boolean
Parameters
- Item
Return value
Minimum_Block_Limit
Minimum_Block_Limit : constant Positive := 16;
Poison
procedure Poison (Region : Region_View; Location : Region_Offset)
Parameters
- Region
- Location
Release
procedure Release (Item : in out View; Value : Allocation_Handle)
Parameters
- Item
- Value
Release
procedure Release (Item : in out View; Value : Allocation_Handle; Timeout : Wait_Timeout)
Parameters
- Item
- Value
- Timeout
Required_Storage
function Required_Storage (Configuration : Best_Fit_Kernel.Configuration) return Byte_Count
Parameters
- Configuration
Return value
Try_Allocate
procedure Try_Allocate
(Item : in out View;
Requested_Size : Positive;
Value : out Allocation_Handle;
Result : out Allocation_Result)
Parameters
- Item
- Requested_Size
- Value
- Result
Try_Allocate
procedure Try_Allocate
(Item : in out View;
Requested_Size : Positive;
Timeout : Wait_Timeout;
Value : out Allocation_Handle;
Result : out Allocation_Result)
Parameters
- Item
- Requested_Size
- Timeout
- Value
- Result
View
type View is limited private;