Allocator class - dart:ffi library (original) (raw)
Manages memory on the native heap.
When allocating memory, prefer calling this allocator directly as a function (see AllocatorAlloc.call for details).
This interface provides only the allocate method to allocate a block of bytes, and the free method to release such a block again. Implementations only need to provide those two methods. The AllocatorAlloc.call extension method is defined in terms of those lower-level operations.
An example of an allocator wrapping another to count the number of allocations:
class CountingAllocator implements Allocator {
final Allocator _wrappedAllocator;
int _totalAllocations = 0;
int _nonFreedAllocations = 0;
CountingAllocator([Allocator? allocator])
: _wrappedAllocator = allocator ?? calloc;
int get totalAllocations => _totalAllocations;
int get nonFreedAllocations => _nonFreedAllocations;
@override
Pointer<T> allocate<T extends NativeType>(int byteCount, {int? alignment}) {
final result =
_wrappedAllocator.allocate<T>(byteCount, alignment: alignment);
_totalAllocations++;
_nonFreedAllocations++;
return result;
}
@override
void free(Pointer<NativeType> pointer) {
_wrappedAllocator.free(pointer);
_nonFreedAllocations--;
}
}
Available extensions
Annotations
- @Since('2.12')
Properties
The hash code for this object.
no setterinherited
A representation of the runtime type of the object.
no setterinherited
Methods
allocate<T extends NativeType>(int byteCount, {int? alignment})→ Pointer<T>
Allocates byteCount
bytes of memory on the native heap.
call<T extends SizedNativeType>([int count = 1])→ Pointer<T>
Available on Allocator, provided by the AllocatorAlloc extension
Allocates sizeOf<T>() * count
bytes of memory using allocate.
free(Pointer<NativeType> pointer)→ void
Releases memory allocated on the native heap.
noSuchMethod(Invocation invocation)→ dynamic
Invoked when a nonexistent method or property is accessed.
inherited
A string representation of this object.
inherited
Operators
operator ==(Object other)→ bool
The equality operator.
inherited