ckb_std/global_alloc_macro/
default_alloc.rs1#[macro_export]
21macro_rules! default_alloc {
22 () => {
23 $crate::default_alloc!({ 4 * 1024 }, { 516 * 1024 }, 64);
24 };
25 ($fixed_block_heap_size:expr, $heap_size:expr, $min_block_size:expr) => {
26 #[repr(align(64))]
27 struct _AlignedHeap<const N: usize>([u8; N]);
28
29 static mut _BUDDY_HEAP: _AlignedHeap<$heap_size> = _AlignedHeap([0u8; $heap_size]);
30 static mut _FIXED_BLOCK_HEAP: _AlignedHeap<$fixed_block_heap_size> =
31 _AlignedHeap([0u8; $fixed_block_heap_size]);
32
33 #[global_allocator]
34 static ALLOC: $crate::buddy_alloc::NonThreadsafeAlloc = unsafe {
35 let fast_param = $crate::buddy_alloc::FastAllocParam::new(
36 _FIXED_BLOCK_HEAP.0.as_ptr(),
37 $fixed_block_heap_size,
38 );
39 let buddy_param = $crate::buddy_alloc::BuddyAllocParam::new_with_zero_filled(
40 _BUDDY_HEAP.0.as_ptr(),
41 $heap_size,
42 $min_block_size,
43 );
44 $crate::buddy_alloc::NonThreadsafeAlloc::new(fast_param, buddy_param)
45 };
46 };
47}