Struct linked_list_allocator::Heap [] [src]

pub struct Heap { /* fields omitted */ }

A fixed size heap backed by a linked list of free memory blocks.

Methods

impl Heap
[src]

Creates an empty heap. All allocate calls will return None.

Initializes an empty heap

Unsafety

This function must be called at most once and must only be used on an empty heap.

Creates a new heap with the given bottom and size. The bottom address must be valid and the memory in the [heap_bottom, heap_bottom + heap_size) range must not be used for anything else. This function is unsafe because it can cause undefined behavior if the given address is invalid.

Allocates a chunk of the given size with the given alignment. Returns a pointer to the beginning of that chunk if it was successful. Else it returns None. This function scans the list of free memory blocks and uses the first block that is big enough. The runtime is in O(n) where n is the number of free blocks, but it should be reasonably fast for small allocations.

Frees the given allocation. ptr must be a pointer returned by a call to the allocate_first_fit function with identical size and alignment. Undefined behavior may occur for invalid arguments, thus this function is unsafe.

This function walks the list of free memory blocks and inserts the freed block at the correct place. If the freed block is adjacent to another free block, the blocks are merged again. This operation is in O(n) since the list needs to be sorted by address.

Returns the bottom address of the heap.

Returns the size of the heap.

Return the top address of the heap

Extends the size of the heap by creating a new hole at the end

Unsafety

The new extended area must be valid

Trait Implementations

impl Alloc for Heap
[src]

🔬 This is a nightly-only experimental API. (allocator_api)

the precise API and guarantees it provides may be tweaked slightly, especially to possibly take into account the types being stored to make room for a future tracing garbage collector

Returns a pointer meeting the size and alignment guarantees of layout. Read more

🔬 This is a nightly-only experimental API. (allocator_api)

the precise API and guarantees it provides may be tweaked slightly, especially to possibly take into account the types being stored to make room for a future tracing garbage collector

Deallocate the memory referenced by ptr. Read more

🔬 This is a nightly-only experimental API. (allocator_api)

the precise API and guarantees it provides may be tweaked slightly, especially to possibly take into account the types being stored to make room for a future tracing garbage collector

Allocator-specific method for signalling an out-of-memory condition. Read more

🔬 This is a nightly-only experimental API. (allocator_api)

the precise API and guarantees it provides may be tweaked slightly, especially to possibly take into account the types being stored to make room for a future tracing garbage collector

Returns bounds on the guaranteed usable size of a successful allocation created with the specified layout. Read more

🔬 This is a nightly-only experimental API. (allocator_api)

the precise API and guarantees it provides may be tweaked slightly, especially to possibly take into account the types being stored to make room for a future tracing garbage collector

Returns a pointer suitable for holding data described by new_layout, meeting its size and alignment guarantees. To accomplish this, this may extend or shrink the allocation referenced by ptr to fit new_layout. Read more

🔬 This is a nightly-only experimental API. (allocator_api)

the precise API and guarantees it provides may be tweaked slightly, especially to possibly take into account the types being stored to make room for a future tracing garbage collector

Behaves like alloc, but also ensures that the contents are set to zero before being returned. Read more

🔬 This is a nightly-only experimental API. (allocator_api)

the precise API and guarantees it provides may be tweaked slightly, especially to possibly take into account the types being stored to make room for a future tracing garbage collector

Behaves like alloc, but also returns the whole size of the returned block. For some layout inputs, like arrays, this may include extra storage usable for additional data. Read more

🔬 This is a nightly-only experimental API. (allocator_api)

the precise API and guarantees it provides may be tweaked slightly, especially to possibly take into account the types being stored to make room for a future tracing garbage collector

Behaves like realloc, but also returns the whole size of the returned block. For some layout inputs, like arrays, this may include extra storage usable for additional data. Read more

🔬 This is a nightly-only experimental API. (allocator_api)

the precise API and guarantees it provides may be tweaked slightly, especially to possibly take into account the types being stored to make room for a future tracing garbage collector

Attempts to extend the allocation referenced by ptr to fit new_layout. Read more

🔬 This is a nightly-only experimental API. (allocator_api)

the precise API and guarantees it provides may be tweaked slightly, especially to possibly take into account the types being stored to make room for a future tracing garbage collector

Attempts to shrink the allocation referenced by ptr to fit new_layout. Read more

🔬 This is a nightly-only experimental API. (allocator_api)

the precise API and guarantees it provides may be tweaked slightly, especially to possibly take into account the types being stored to make room for a future tracing garbage collector

Allocates a block suitable for holding an instance of T. Read more

🔬 This is a nightly-only experimental API. (allocator_api)

the precise API and guarantees it provides may be tweaked slightly, especially to possibly take into account the types being stored to make room for a future tracing garbage collector

Deallocates a block suitable for holding an instance of T. Read more

🔬 This is a nightly-only experimental API. (allocator_api)

the precise API and guarantees it provides may be tweaked slightly, especially to possibly take into account the types being stored to make room for a future tracing garbage collector

Allocates a block suitable for holding n instances of T. Read more

🔬 This is a nightly-only experimental API. (allocator_api)

the precise API and guarantees it provides may be tweaked slightly, especially to possibly take into account the types being stored to make room for a future tracing garbage collector

Reallocates a block previously suitable for holding n_old instances of T, returning a block suitable for holding n_new instances of T. Read more

🔬 This is a nightly-only experimental API. (allocator_api)

the precise API and guarantees it provides may be tweaked slightly, especially to possibly take into account the types being stored to make room for a future tracing garbage collector

Deallocates a block suitable for holding n instances of T. Read more