View source code
Display the source code in std/experimental/allocator/building_blocks/aligned_block_list.d from which this
page was generated on github.
Report a bug
If you spot a problem with this page, click here to create a
Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page.
Requires a signed-in GitHub account. This works well for small changes.
If you'd like to make larger changes you may want to consider using
local clone.
Struct std.experimental.allocator.building_blocks.aligned_block_list.SharedAlignedBlockList
SharedAlignedBlockList
is the threadsafe version of AlignedBlockList
.
The Allocator
template parameter must refer a shared allocator.
Also, ParentAllocator
must be a shared allocator, supporting alignedAllocate
.
struct SharedAlignedBlockList(Allocator, ParentAllocator, ulong theAlignment = 1 << 21)
;
Methods
Name | Description |
---|---|
allocate
(n)
|
Returns a chunk of memory of size n
It finds the first node in the AlignedBlockNode list which has available memory,
and moves it to the front of the list.
|
deallocate
(b)
|
Deallocates the buffer b given as parameter. Deallocations take place in constant
time, regardless of the number of nodes in the list. b is rounded down
to the nearest multiple of the alignment to quickly find the corresponding
AlignedBlockNode .
|
owns
(b)
|
Returns Ternary if the buffer belongs to the parent allocator and
Ternary otherwise.
|
Parameters
Name | Description |
---|---|
Allocator | the shared allocator which is used to manage each node; it must have a constructor which receives
ubyte[] and it must not have any parent allocators, except for the NullAllocator |
ParentAllocator | each node draws memory from the parent allocator; it must be shared and support alignedAllocate |
theAlignment | alignment of each block and at the same time length of each node |
Example
import std .experimental .allocator .building_blocks .region : SharedBorrowedRegion;
import std .experimental .allocator .building_blocks .ascending_page_allocator : SharedAscendingPageAllocator;
import std .experimental .allocator .building_blocks .null_allocator : NullAllocator;
import core .thread : ThreadGroup;
enum numThreads = 8;
enum size = 2048;
enum maxIter = 10;
/*
In this example we use 'SharedAlignedBlockList' together with
'SharedBorrowedRegion', in order to create a fast, thread-safe allocator.
*/
alias SuperAllocator = SharedAlignedBlockList!(
SharedBorrowedRegion!(1),
SharedAscendingPageAllocator,
4096);
SuperAllocator a;
// The 'SuperAllocator' will draw memory from a 'SharedAscendingPageAllocator'
a .parent = SharedAscendingPageAllocator(4096 * 1024);
// Launch 'numThreads', each performing allocations
void fun()
{
foreach (i; 0 .. maxIter)
{
void[] b = a .allocate(size);
writeln(b .length); // size
}
}
auto tg = new ThreadGroup;
foreach (i; 0 .. numThreads)
{
tg .create(&fun);
}
tg .joinAll();
Authors
License
Copyright © 1999-2024 by the D Language Foundation | Page generated by ddox.