1#![feature(allocator_api)]
2#![feature(never_type)]
3#![feature(slice_ptr_get)]
4
5#![deny(warnings)]
6#![doc(test(attr(deny(warnings))))]
7#![doc(test(attr(allow(dead_code))))]
8#![doc(test(attr(allow(unused_variables))))]
9#![allow(clippy::collapsible_else_if)]
10#![allow(clippy::manual_is_multiple_of)]
11#![allow(clippy::needless_lifetimes)]
12
13#![no_std]
14
15extern crate alloc;
16
17mod base;
18pub use base::*;
19
20pub mod fallbacked;
21
22pub mod limited_up_to;
23
24mod global;
25pub use global::*;
26
27mod as_global;
28pub use as_global::*;
29
30mod logging;
31pub use logging::*;
32
33#[cfg(all(not(target_os="dos"), windows))]
34mod winapi;
35
36#[cfg(all(not(target_os="dos"), not(windows)))]
37mod posix;
38
39#[cfg(not(target_os="dos"))]
40mod system;
41
42#[cfg(not(target_os="dos"))]
43pub use system::*;
44
45mod impossible;
46pub use impossible::*;
47
48mod non_working;
49pub use non_working::*;
50
51pub mod stacked;
52
53pub mod freelist;
54
55#[doc(hidden)]
56pub use core::alloc::Layout as std_alloc_Layout;
57#[doc(hidden)]
58pub use core::mem::MaybeUninit as std_mem_MaybeUninit;
59#[doc(hidden)]
60pub use core::ptr::addr_of_mut as std_ptr_addr_of_mut;
61
62#[macro_export]
63macro_rules! freelist_allocator_128_KiB_align_8 {
64 ($name:ident : $ty:ident) => {
65 const MEM_SIZE: usize = 131072;
66
67 static mut MEM: [$crate::std_mem_MaybeUninit<u8>; MEM_SIZE] =
68 [$crate::std_mem_MaybeUninit::uninit(); MEM_SIZE]
69 ;
70
71 static STACKED: $crate::stacked::Stacked =
72 $crate::stacked::Stacked::from_static_array(unsafe { &mut *$crate::std_ptr_addr_of_mut!(MEM) })
73 ;
74
75 type $ty = $crate::fallbacked::Fallbacked<$crate::limited_up_to::LimitedUpTo<
76 $crate::freelist::Freelist<$crate::freelist::NoLimit, &'static $crate::stacked::Stacked>
77 >, &'static Freelist16B>;
78
79 static $name: $ty = $crate::fallbacked::Fallbacked(
80 $crate::limited_up_to::LimitedUpTo::new(
81 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(8, 8) },
82 $crate::freelist::Freelist::new(
83 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(8, 8) },
84 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(1, 1) },
85 $crate::freelist::NoLimit,
86 &STACKED
87 )
88 ),
89 &FREELIST_16_B
90 );
91
92 type Freelist16B = $crate::fallbacked::Fallbacked<$crate::limited_up_to::LimitedUpTo<
93 $crate::freelist::Freelist<$crate::freelist::NoLimit, &'static $crate::stacked::Stacked>
94 >, &'static Freelist32B>;
95
96 static FREELIST_16_B: Freelist16B = $crate::fallbacked::Fallbacked(
97 $crate::limited_up_to::LimitedUpTo::new(
98 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(16, 8) },
99 $crate::freelist::Freelist::new(
100 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(16, 8) },
101 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(9, 1) },
102 $crate::freelist::NoLimit,
103 &STACKED
104 )
105 ),
106 &FREELIST_32_B
107 );
108
109 type Freelist32B = $crate::fallbacked::Fallbacked<$crate::limited_up_to::LimitedUpTo<
110 $crate::freelist::Freelist<$crate::freelist::NoLimit, &'static $crate::stacked::Stacked>
111 >, &'static Freelist64B>;
112
113 static FREELIST_32_B: Freelist32B = $crate::fallbacked::Fallbacked(
114 $crate::limited_up_to::LimitedUpTo::new(
115 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(32, 8) },
116 $crate::freelist::Freelist::new(
117 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(32, 8) },
118 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(17, 1) },
119 $crate::freelist::NoLimit,
120 &STACKED
121 )
122 ),
123 &FREELIST_64_B
124 );
125
126 type Freelist64B = $crate::fallbacked::Fallbacked<$crate::limited_up_to::LimitedUpTo<
127 $crate::freelist::Freelist<$crate::freelist::NoLimit, &'static $crate::stacked::Stacked>
128 >, &'static Freelist128B>;
129
130 static FREELIST_64_B: Freelist64B = $crate::fallbacked::Fallbacked(
131 $crate::limited_up_to::LimitedUpTo::new(
132 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(64, 8) },
133 $crate::freelist::Freelist::new(
134 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(64, 8) },
135 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(33, 1) },
136 $crate::freelist::NoLimit,
137 &STACKED
138 )
139 ),
140 &FREELIST_128_B
141 );
142
143 type Freelist128B = $crate::fallbacked::Fallbacked<$crate::limited_up_to::LimitedUpTo<
144 $crate::freelist::Freelist<$crate::freelist::NoLimit, &'static $crate::stacked::Stacked>
145 >, &'static Freelist256B>;
146
147 static FREELIST_128_B: Freelist128B = $crate::fallbacked::Fallbacked(
148 $crate::limited_up_to::LimitedUpTo::new(
149 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(128, 8) },
150 $crate::freelist::Freelist::new(
151 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(128, 8) },
152 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(65, 1) },
153 $crate::freelist::NoLimit,
154 &STACKED
155 )
156 ),
157 &FREELIST_256_B
158 );
159
160 type Freelist256B = $crate::fallbacked::Fallbacked<$crate::limited_up_to::LimitedUpTo<
161 $crate::freelist::Freelist<$crate::freelist::NoLimit, &'static $crate::stacked::Stacked>
162 >, &'static Freelist512B>;
163
164 static FREELIST_256_B: Freelist256B = $crate::fallbacked::Fallbacked(
165 $crate::limited_up_to::LimitedUpTo::new(
166 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(256, 8) },
167 $crate::freelist::Freelist::new(
168 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(256, 8) },
169 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(129, 1) },
170 $crate::freelist::NoLimit,
171 &STACKED
172 )
173 ),
174 &FREELIST_512_B
175 );
176
177 type Freelist512B = $crate::fallbacked::Fallbacked<$crate::limited_up_to::LimitedUpTo<
178 $crate::freelist::Freelist<$crate::freelist::NoLimit, &'static $crate::stacked::Stacked>
179 >, &'static Freelist1KiB>;
180
181 static FREELIST_512_B: Freelist512B = $crate::fallbacked::Fallbacked(
182 $crate::limited_up_to::LimitedUpTo::new(
183 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(512, 8) },
184 $crate::freelist::Freelist::new(
185 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(512, 8) },
186 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(257, 1) },
187 $crate::freelist::NoLimit,
188 &STACKED
189 )
190 ),
191 &FREELIST_1_KIB
192 );
193
194 type Freelist1KiB = $crate::fallbacked::Fallbacked<$crate::limited_up_to::LimitedUpTo<
195 $crate::freelist::Freelist<$crate::freelist::NoLimit, &'static $crate::stacked::Stacked>
196 >, &'static Freelist2KiB>;
197
198 static FREELIST_1_KIB: Freelist1KiB = $crate::fallbacked::Fallbacked(
199 $crate::limited_up_to::LimitedUpTo::new(
200 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(1024, 8) },
201 $crate::freelist::Freelist::new(
202 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(1024, 8) },
203 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(513, 1) },
204 $crate::freelist::NoLimit,
205 &STACKED
206 )
207 ),
208 &FREELIST_2_KIB
209 );
210
211 type Freelist2KiB = $crate::fallbacked::Fallbacked<$crate::limited_up_to::LimitedUpTo<
212 $crate::freelist::Freelist<$crate::freelist::NoLimit, &'static $crate::stacked::Stacked>
213 >, &'static Freelist4KiB>;
214
215 static FREELIST_2_KIB: Freelist2KiB = $crate::fallbacked::Fallbacked(
216 $crate::limited_up_to::LimitedUpTo::new(
217 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(2048, 8) },
218 $crate::freelist::Freelist::new(
219 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(2048, 8) },
220 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(1025, 1) },
221 $crate::freelist::NoLimit,
222 &STACKED
223 )
224 ),
225 &FREELIST_4_KIB
226 );
227
228 type Freelist4KiB = $crate::fallbacked::Fallbacked<$crate::limited_up_to::LimitedUpTo<
229 $crate::freelist::Freelist<$crate::freelist::NoLimit, &'static $crate::stacked::Stacked>
230 >, &'static Freelist8KiB>;
231
232 static FREELIST_4_KIB: Freelist4KiB = $crate::fallbacked::Fallbacked(
233 $crate::limited_up_to::LimitedUpTo::new(
234 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(4096, 8) },
235 $crate::freelist::Freelist::new(
236 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(4096, 8) },
237 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(2049, 1) },
238 $crate::freelist::NoLimit,
239 &STACKED
240 )
241 ),
242 &FREELIST_8_KIB
243 );
244
245 type Freelist8KiB = $crate::fallbacked::Fallbacked<$crate::limited_up_to::LimitedUpTo<
246 $crate::freelist::Freelist<$crate::freelist::NoLimit, &'static $crate::stacked::Stacked>
247 >, &'static Freelist16KiB>;
248
249 static FREELIST_8_KIB: Freelist8KiB = $crate::fallbacked::Fallbacked(
250 $crate::limited_up_to::LimitedUpTo::new(
251 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(8192, 8) },
252 $crate::freelist::Freelist::new(
253 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(8192, 8) },
254 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(4097, 1) },
255 $crate::freelist::NoLimit,
256 &STACKED
257 )
258 ),
259 &FREELIST_16_KIB
260 );
261
262 type Freelist16KiB = $crate::fallbacked::Fallbacked<$crate::limited_up_to::LimitedUpTo<
263 $crate::freelist::Freelist<$crate::freelist::NoLimit, &'static $crate::stacked::Stacked>
264 >, &'static Freelist32KiB>;
265
266 static FREELIST_16_KIB: Freelist16KiB = $crate::fallbacked::Fallbacked(
267 $crate::limited_up_to::LimitedUpTo::new(
268 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(16384, 8) },
269 $crate::freelist::Freelist::new(
270 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(16384, 8) },
271 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(8193, 1) },
272 $crate::freelist::NoLimit,
273 &STACKED
274 )
275 ),
276 &FREELIST_32_KIB
277 );
278
279 type Freelist32KiB = $crate::fallbacked::Fallbacked<$crate::limited_up_to::LimitedUpTo<
280 $crate::freelist::Freelist<$crate::freelist::NoLimit, &'static $crate::stacked::Stacked>
281 >, &'static Freelist64KiB>;
282
283 static FREELIST_32_KIB: Freelist32KiB = $crate::fallbacked::Fallbacked(
284 $crate::limited_up_to::LimitedUpTo::new(
285 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(32768, 8) },
286 $crate::freelist::Freelist::new(
287 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(32768, 8) },
288 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(16385, 1) },
289 $crate::freelist::NoLimit,
290 &STACKED
291 )
292 ),
293 &FREELIST_64_KIB
294 );
295
296 type Freelist64KiB = $crate::limited_up_to::LimitedUpTo<
297 $crate::freelist::Freelist<$crate::freelist::NoLimit, &'static $crate::stacked::Stacked>
298 >;
299
300 static FREELIST_64_KIB: Freelist64KiB = $crate::limited_up_to::LimitedUpTo::new(
301 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(65536, 8) },
302 $crate::freelist::Freelist::new(
303 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(65536, 8) },
304 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(32769, 1) },
305 $crate::freelist::NoLimit,
306 &STACKED
307 )
308 );
309 };
310}
311
312#[macro_export]
313macro_rules! global_freelist_allocator_128_KiB_align_8 {
314 () => {
315 const MEM_SIZE: usize = 131072;
316
317 static mut MEM: [$crate::std_mem_MaybeUninit<u8>; MEM_SIZE] =
318 [$crate::std_mem_MaybeUninit::uninit(); MEM_SIZE]
319 ;
320
321 static STACKED: $crate::stacked::Stacked =
322 $crate::stacked::Stacked::from_static_array(unsafe { &mut *$crate::std_ptr_addr_of_mut!(MEM) })
323 ;
324
325 type Freelist8B = $crate::AsGlobal<$crate::fallbacked::Fallbacked<$crate::limited_up_to::LimitedUpTo<
326 $crate::freelist::Freelist<$crate::freelist::NoLimit, &'static $crate::stacked::Stacked>
327 >, &'static Freelist16B>>;
328
329 #[global_allocator]
330 static FREELIST_8_B: Freelist8B = $crate::AsGlobal($crate::fallbacked::Fallbacked(
331 $crate::limited_up_to::LimitedUpTo::new(
332 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(8, 8) },
333 $crate::freelist::Freelist::new(
334 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(8, 8) },
335 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(1, 1) },
336 $crate::freelist::NoLimit,
337 &STACKED
338 )
339 ),
340 &FREELIST_16_B
341 ));
342
343 type Freelist16B = $crate::fallbacked::Fallbacked<$crate::limited_up_to::LimitedUpTo<
344 $crate::freelist::Freelist<$crate::freelist::NoLimit, &'static $crate::stacked::Stacked>
345 >, &'static Freelist32B>;
346
347 static FREELIST_16_B: Freelist16B = $crate::fallbacked::Fallbacked(
348 $crate::limited_up_to::LimitedUpTo::new(
349 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(16, 8) },
350 $crate::freelist::Freelist::new(
351 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(16, 8) },
352 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(9, 1) },
353 $crate::freelist::NoLimit,
354 &STACKED
355 )
356 ),
357 &FREELIST_32_B
358 );
359
360 type Freelist32B = $crate::fallbacked::Fallbacked<$crate::limited_up_to::LimitedUpTo<
361 $crate::freelist::Freelist<$crate::freelist::NoLimit, &'static $crate::stacked::Stacked>
362 >, &'static Freelist64B>;
363
364 static FREELIST_32_B: Freelist32B = $crate::fallbacked::Fallbacked(
365 $crate::limited_up_to::LimitedUpTo::new(
366 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(32, 8) },
367 $crate::freelist::Freelist::new(
368 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(32, 8) },
369 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(17, 1) },
370 $crate::freelist::NoLimit,
371 &STACKED
372 )
373 ),
374 &FREELIST_64_B
375 );
376
377 type Freelist64B = $crate::fallbacked::Fallbacked<$crate::limited_up_to::LimitedUpTo<
378 $crate::freelist::Freelist<$crate::freelist::NoLimit, &'static $crate::stacked::Stacked>
379 >, &'static Freelist128B>;
380
381 static FREELIST_64_B: Freelist64B = $crate::fallbacked::Fallbacked(
382 $crate::limited_up_to::LimitedUpTo::new(
383 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(64, 8) },
384 $crate::freelist::Freelist::new(
385 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(64, 8) },
386 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(33, 1) },
387 $crate::freelist::NoLimit,
388 &STACKED
389 )
390 ),
391 &FREELIST_128_B
392 );
393
394 type Freelist128B = $crate::fallbacked::Fallbacked<$crate::limited_up_to::LimitedUpTo<
395 $crate::freelist::Freelist<$crate::freelist::NoLimit, &'static $crate::stacked::Stacked>
396 >, &'static Freelist256B>;
397
398 static FREELIST_128_B: Freelist128B = $crate::fallbacked::Fallbacked(
399 $crate::limited_up_to::LimitedUpTo::new(
400 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(128, 8) },
401 $crate::freelist::Freelist::new(
402 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(128, 8) },
403 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(65, 1) },
404 $crate::freelist::NoLimit,
405 &STACKED
406 )
407 ),
408 &FREELIST_256_B
409 );
410
411 type Freelist256B = $crate::fallbacked::Fallbacked<$crate::limited_up_to::LimitedUpTo<
412 $crate::freelist::Freelist<$crate::freelist::NoLimit, &'static $crate::stacked::Stacked>
413 >, &'static Freelist512B>;
414
415 static FREELIST_256_B: Freelist256B = $crate::fallbacked::Fallbacked(
416 $crate::limited_up_to::LimitedUpTo::new(
417 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(256, 8) },
418 $crate::freelist::Freelist::new(
419 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(256, 8) },
420 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(129, 1) },
421 $crate::freelist::NoLimit,
422 &STACKED
423 )
424 ),
425 &FREELIST_512_B
426 );
427
428 type Freelist512B = $crate::fallbacked::Fallbacked<$crate::limited_up_to::LimitedUpTo<
429 $crate::freelist::Freelist<$crate::freelist::NoLimit, &'static $crate::stacked::Stacked>
430 >, &'static Freelist1KiB>;
431
432 static FREELIST_512_B: Freelist512B = $crate::fallbacked::Fallbacked(
433 $crate::limited_up_to::LimitedUpTo::new(
434 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(512, 8) },
435 $crate::freelist::Freelist::new(
436 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(512, 8) },
437 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(257, 1) },
438 $crate::freelist::NoLimit,
439 &STACKED
440 )
441 ),
442 &FREELIST_1_KIB
443 );
444
445 type Freelist1KiB = $crate::fallbacked::Fallbacked<$crate::limited_up_to::LimitedUpTo<
446 $crate::freelist::Freelist<$crate::freelist::NoLimit, &'static $crate::stacked::Stacked>
447 >, &'static Freelist2KiB>;
448
449 static FREELIST_1_KIB: Freelist1KiB = $crate::fallbacked::Fallbacked(
450 $crate::limited_up_to::LimitedUpTo::new(
451 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(1024, 8) },
452 $crate::freelist::Freelist::new(
453 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(1024, 8) },
454 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(513, 1) },
455 $crate::freelist::NoLimit,
456 &STACKED
457 )
458 ),
459 &FREELIST_2_KIB
460 );
461
462 type Freelist2KiB = $crate::fallbacked::Fallbacked<$crate::limited_up_to::LimitedUpTo<
463 $crate::freelist::Freelist<$crate::freelist::NoLimit, &'static $crate::stacked::Stacked>
464 >, &'static Freelist4KiB>;
465
466 static FREELIST_2_KIB: Freelist2KiB = $crate::fallbacked::Fallbacked(
467 $crate::limited_up_to::LimitedUpTo::new(
468 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(2048, 8) },
469 $crate::freelist::Freelist::new(
470 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(2048, 8) },
471 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(1025, 1) },
472 $crate::freelist::NoLimit,
473 &STACKED
474 )
475 ),
476 &FREELIST_4_KIB
477 );
478
479 type Freelist4KiB = $crate::fallbacked::Fallbacked<$crate::limited_up_to::LimitedUpTo<
480 $crate::freelist::Freelist<$crate::freelist::NoLimit, &'static $crate::stacked::Stacked>
481 >, &'static Freelist8KiB>;
482
483 static FREELIST_4_KIB: Freelist4KiB = $crate::fallbacked::Fallbacked(
484 $crate::limited_up_to::LimitedUpTo::new(
485 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(4096, 8) },
486 $crate::freelist::Freelist::new(
487 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(4096, 8) },
488 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(2049, 1) },
489 $crate::freelist::NoLimit,
490 &STACKED
491 )
492 ),
493 &FREELIST_8_KIB
494 );
495
496 type Freelist8KiB = $crate::fallbacked::Fallbacked<$crate::limited_up_to::LimitedUpTo<
497 $crate::freelist::Freelist<$crate::freelist::NoLimit, &'static $crate::stacked::Stacked>
498 >, &'static Freelist16KiB>;
499
500 static FREELIST_8_KIB: Freelist8KiB = $crate::fallbacked::Fallbacked(
501 $crate::limited_up_to::LimitedUpTo::new(
502 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(8192, 8) },
503 $crate::freelist::Freelist::new(
504 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(8192, 8) },
505 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(4097, 1) },
506 $crate::freelist::NoLimit,
507 &STACKED
508 )
509 ),
510 &FREELIST_16_KIB
511 );
512
513 type Freelist16KiB = $crate::fallbacked::Fallbacked<$crate::limited_up_to::LimitedUpTo<
514 $crate::freelist::Freelist<$crate::freelist::NoLimit, &'static $crate::stacked::Stacked>
515 >, &'static Freelist32KiB>;
516
517 static FREELIST_16_KIB: Freelist16KiB = $crate::fallbacked::Fallbacked(
518 $crate::limited_up_to::LimitedUpTo::new(
519 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(16384, 8) },
520 $crate::freelist::Freelist::new(
521 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(16384, 8) },
522 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(8193, 1) },
523 $crate::freelist::NoLimit,
524 &STACKED
525 )
526 ),
527 &FREELIST_32_KIB
528 );
529
530 type Freelist32KiB = $crate::fallbacked::Fallbacked<$crate::limited_up_to::LimitedUpTo<
531 $crate::freelist::Freelist<$crate::freelist::NoLimit, &'static $crate::stacked::Stacked>
532 >, &'static Freelist64KiB>;
533
534 static FREELIST_32_KIB: Freelist32KiB = $crate::fallbacked::Fallbacked(
535 $crate::limited_up_to::LimitedUpTo::new(
536 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(32768, 8) },
537 $crate::freelist::Freelist::new(
538 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(32768, 8) },
539 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(16385, 1) },
540 $crate::freelist::NoLimit,
541 &STACKED
542 )
543 ),
544 &FREELIST_64_KIB
545 );
546
547 type Freelist64KiB = $crate::limited_up_to::LimitedUpTo<
548 $crate::freelist::Freelist<$crate::freelist::NoLimit, &'static $crate::stacked::Stacked>
549 >;
550
551 static FREELIST_64_KIB: Freelist64KiB = $crate::limited_up_to::LimitedUpTo::new(
552 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(65536, 8) },
553 $crate::freelist::Freelist::new(
554 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(65536, 8) },
555 unsafe { $crate::std_alloc_Layout::from_size_align_unchecked(32769, 1) },
556 $crate::freelist::NoLimit,
557 &STACKED
558 )
559 );
560 };
561}