#pragma once #include enum { kHeapSizePages = 1024, kHeapBlockHeaderMagic = 0x43555445, // CUTE kKernelHeapStart = 0xFFFFFFFFC0000000 }; static inline Address VMPhysToHeap(Address phys) { return phys + kKernelHeapStart; } static inline Address VMHeapToPhys(Address heap) { return heap - kKernelHeapStart; } typedef struct __attribute__((aligned(16))) VMHeapBlockHeader { UInt64 magic; struct VMHeapBlockHeader* next; struct VMHeapBlockHeader* previous; UInt64 size; bool isFree; } VMHeapBlockHeader; void HeapInitialize(); Pointer HeapAllocate(Size size); void HeapFree(Pointer pointer); Pointer HeapResize(Pointer pointer, Size newSize);