Safety improvements in virtual memory and ability to share references

This commit is contained in:
Andrew Golovashevich 2025-12-18 23:43:59 +03:00
parent a613309440
commit 4d5f71df4b

View File

@ -1,18 +1,24 @@
use std::ptr::{NonNull, null};
pub unsafe trait VirtualMemoryApi: Sized + Drop { pub unsafe trait VirtualMemoryApi: Sized + Drop {
type Reservation: Reservation; type Reservation<'s>: Reservation + 's
where
Self: 's;
fn getPageSize(&self) -> usize; fn getPageSize(&self) -> usize;
fn reserveMemory( fn reserveMemory<'s>(
&mut self, &'s self,
extend: Option<&Self::Reservation>, extend: ReservationToExtend<&Self::Reservation<'s>>,
pagesCount: usize, pagesCount: usize,
) -> Self::Reservation; ) -> Option<Self::Reservation<'s>>;
}
pub enum ReservationToExtend<T> {
ReserveAnywhere,
TryExtend(T),
} }
pub unsafe trait Reservation: Sized + Ord + Drop { pub unsafe trait Reservation: Sized + Ord + Drop {
fn commitPages(&mut self, indexOfFirst: usize, count: usize) -> *mut [u8]; unsafe fn commitPages(&mut self, indexOfFirst: usize, count: usize) -> *mut [u8];
fn decommitPages(&mut self, indexOfFirst: usize, count: usize); unsafe fn decommitPages(&mut self, indexOfFirst: usize, count: usize);
unsafe fn release(self);
} }