This repository has been archived on 2023-09-28. You can view files and clone it, but cannot push or open issues or pull requests.
homepage/content/projects/noxos/docs/codebase/mm/heap.h.md

3.5 KiB

title summary
heap.h dynamic memory allocator

heap_segment_T - struct

This header lies in memory, directly before the accessible buffer of the related segment.

Name Type Description
magic uint32_t An out of bounds memory write would override this, what would indicate a heap corruption
size uint64_t The size of the segment
free bool If this is set, the segment is reclaimable
next heap_segment_T* The next segment in the heap
prev heap_segment_T* The previous segment in the heap

heap_T - struct

Name Type Description
start void* The start of the heaps segment pool
end void* The current end of the heaps segment pool (growing upwards)
last_segment heap_segment_T* The current last segment in the heaps segment pool

heap_init(heap*, base) - function (void)

Initializes heap at base (virtual address). It will automatically map some page frames to that address.

heap_memory_allocate(heap*, size) - function (void)

Returns a pointer to a free usable memory location, that has at least the given size. It will return NULL and log an error, if the heap is corrupted. Because this function iterates over the entire heap to find a free segment, it is kinda slow.

heap_memory_free(heap*, address) - function (void)

Frees a with heap_memory_allocate created heap segment, and makes it usable again. Does nothing, if the address doesn't point to a valid heap segment.

heap_dump_segments(heap*) - function (void)

Logs a complete list, of all heap segments. Useful, when debugging / testing the heap.

heap_destruct(heap*) - function (void)

Invalidates all segments of a heap, frees all used page frames and unmaps them.