On Thu, Aug 01, 2024 at 04:25:25PM +0200, Alice Ryhl wrote: > On Thu, Aug 1, 2024 at 2:27 PM Danilo Krummrich <dakr@xxxxxxxxxx> wrote: > > > > On Thu, Aug 01, 2024 at 10:19:41AM +0200, Alice Ryhl wrote: > > > On Thu, Aug 1, 2024 at 2:07 AM Danilo Krummrich <dakr@xxxxxxxxxx> wrote: > > > > + /// Free an existing memory allocation. > > > > + /// > > > > + /// # Safety > > > > + /// > > > > + /// `ptr` must point to an existing and valid memory allocation created by this `Allocator` > > > > + /// instance. > > > > + unsafe fn free(ptr: NonNull<u8>) { > > > > + // SAFETY: `ptr` is guaranteed to be previously allocated with this `Allocator` or NULL. > > > > + // Calling `realloc` with a buffer size of zero, frees the buffer `ptr` points to. > > > > + let _ = unsafe { Self::realloc(Some(ptr), Layout::new::<()>(), Flags(0)) }; > > > > + } > > > > > > At the very least, the provided implementation of `free` changes the > > > alignment when it calls `realloc`. > > > > Yes, I think that's fine though. Hopefully no one attempts to use the memory > > anymore once `free` is being called. > > Sure, but if you require the alignment to remain constant throughout > calls to realloc, then you have to word it in a way that allows a > different alignment when the new size is zero. Agreed, this case should be covered once I documented that the new alignment must be equal to or smaller than the old alignment. > > Alice >