|0.1.3||Jan 28, 2017|
|0.1.2||Jan 24, 2016|
|0.1.1||Oct 14, 2015|
|0.1.0||Oct 14, 2015|
#79 in Memory management
3,228 downloads per month
Used in 15 crates (6 directly)
|Linux / OS X||Windows|
This crate provides cross-platform primitives for requesting specifically
aligned allocations. It is not meant to be used as a general allocator API
alloc::heap, but can be used for infrequent large allocations that have a
specific alignment requirement.
For example, certain arena allocators can find the arena in which an object was allocated by masking the address bits if the arena is aligned to its size.
On Unix, this crate makes use of the
posix_memalign function. On Windows, it's
a little more complicated: We use
VirtualAlloc to reserve a chunk of address
space large enough for the allocation plus alignment (no memory is actually
allocated), then calculate an aligned address inside this reserved space, undo
the reservation with
VirtualFree (the extra bit of reserved memory for the
alignment won't get wasted), and
VirtualAlloc again, this time passing the aligned pointer and
actually allocating the memory instead of just reserving address space.
As usual, in your
[dependencies] aligned_alloc = "0.1"
And in your
extern crate aligned_alloc;
The API is simple, there are just two methods:
size Bytes aligned to
align Bytes. Returns a null pointer on allocation failure.
The returned pointer must be deallocated by using
Note: This function is meant to be used for infrequent large allocations (as
guarantees suitable alignment for all native datatypes) and might be quite slow when used
size: The size of the allocation in bytes.
align: The alignment of the allocation (at least the size of
usizeon the current platform). Must also be a power of two.
Deallocates aligned memory that was allocated with
aligned_alloc. Unsafe because calling this
with a pointer that was not allocated with
aligned_alloc (or already released) causes