working on L4's tlsf
This commit is contained in:
@@ -51,12 +51,57 @@ namespace StgSharp.HighPerformance.Memory
|
||||
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Explicit, Size = 64, Pack = 64)]
|
||||
private unsafe struct CacheLineHead
|
||||
internal enum AllocationState : byte
|
||||
{
|
||||
|
||||
[FieldOffset(0)] internal Tlsf.Handle AllocatorEntry;
|
||||
[FieldOffset(0)] internal readonly M512 Buffer;
|
||||
SpareOrCollect = 0,
|
||||
Free = 1,
|
||||
Alloc = 2,
|
||||
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Explicit, Size = 64, Pack = 64)]
|
||||
private unsafe struct CacheLineMetadata
|
||||
{
|
||||
|
||||
#region lsf area
|
||||
|
||||
internal const ulong Mask48Bits = 0x0000FFFFFFFFFFFF;
|
||||
|
||||
[FieldOffset(0)] private readonly M512 FillingMask;
|
||||
|
||||
[FieldOffset(16)] private ulong PositionMask;
|
||||
[FieldOffset(24)] private ulong SizeMask;
|
||||
|
||||
[FieldOffset(30)] internal AllocationState State;
|
||||
[FieldOffset(31)] internal sbyte Level;
|
||||
|
||||
[FieldOffset(0)] public int NextLevel;
|
||||
[FieldOffset(4)] public int NextNear;
|
||||
[FieldOffset(8)] public int PreviousLevel;
|
||||
[FieldOffset(12)] public int PreviousNear;
|
||||
|
||||
public Ptr64 Position
|
||||
{
|
||||
readonly get => PositionMask;
|
||||
set => PositionMask = value;
|
||||
}
|
||||
|
||||
public Ptr64 SizeForAllocator
|
||||
{
|
||||
readonly get => (Ptr64)(SizeMask & Mask48Bits);
|
||||
set => SizeMask = (SizeMask & ~Mask48Bits) | ((ulong)value & Mask48Bits);
|
||||
}
|
||||
|
||||
public Ptr64 SizeForSpare
|
||||
{
|
||||
readonly get => SizeMask;
|
||||
set => SizeMask = value;
|
||||
}
|
||||
|
||||
public static uint SizeOf { get; } = (uint)Unsafe.SizeOf<CacheLineMetadata>();
|
||||
|
||||
#endregion
|
||||
|
||||
#region reference counting and state information
|
||||
|
||||
@@ -65,21 +110,13 @@ namespace StgSharp.HighPerformance.Memory
|
||||
|
||||
#endregion
|
||||
|
||||
#region hlsf entry alias
|
||||
|
||||
public readonly Ptr64 Address => AllocatorEntry.Address;
|
||||
|
||||
public readonly Ptr64 Size => AllocatorEntry.Size;
|
||||
|
||||
#endregion
|
||||
|
||||
#region cache line information
|
||||
|
||||
[FieldOffset(32)] internal short Predictor;
|
||||
[FieldOffset(34)] internal ushort Profile;
|
||||
[FieldOffset(36)] internal nuint Origin;
|
||||
|
||||
#endregion
|
||||
#endregion
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user