pub(super) fn with_temporary_memory<R>(size: usize, mut f: impl FnMut(&mut [u8]) -> R) -> R {
#[inline(never)]
fn stack_mem<const STACK_SIZE: usize, R>(size: usize, mut f: impl FnMut(&mut [u8]) -> R) -> R {
f(&mut [0u8; STACK_SIZE][..size])
}
if size <= 512 {
stack_mem::<512, _>(size, f)
} else if size <= 1024 {
stack_mem::<1024, _>(size, f)
} else if size <= 2048 {
stack_mem::<2048, _>(size, f)
} else if size <= 4096 {
stack_mem::<4096, _>(size, f)
} else if size <= 8192 {
stack_mem::<8192, _>(size, f)
} else if size <= 16384 {
stack_mem::<16384, _>(size, f)
} else {
f(&mut vec![0u8; size])
}
}