deallocate хочет NonNull<u8>?
Вероятно, на первый элемент указатель
Здесь не в этом даже дело, ради deallocate приходится создавать новый NonNull<u8> (нашел проблему) и, если это так, апи выглядит неконсистентно
Да, я согласен, выглядит странно
интересно. в любом случае внутри NonNull это просто указатель, НО. alloc (-> NonNull<[u8]>) 1. в нем создается обычный NonNull (*mut T) 2. но потом дергается NonNull::slice_from_raw_parts 3. а в нем дергается ptr::slice_from_raw_parts_mut (+ *mut T кастится до *mut [T]) 4. указатель сливается с len и получается PtrRepr и *mut [T] становится действительно толстым указателем
в случае с dealloc это выходит тупо *mut T
Нормально, аллокатор и так знает, какого размера кусок памяти отдал, а вот на стороне запроса неизвестно, как много он выделит. Так гибче.
Обсуждают сегодня