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