[−][src]Struct x86_64::VirtAddr
A canonical 64-bit virtual memory address.
This is a wrapper type around an u64
, so it is always 8 bytes, even when compiled
on non 64-bit systems. The UsizeConversions
trait can be used for performing conversions
between u64
and usize
.
On x86_64
, only the 48 lower bits of a virtual address can be used. The top 16 bits need
to be copies of bit 47, i.e. the most significant bit. Addresses that fulfil this criterium
are called “canonical”. This type guarantees that it always represents a canonical address.
Methods
impl VirtAddr
[src]
pub fn new(addr: u64) -> VirtAddr
[src]
Creates a new canonical virtual address.
This function performs sign extension of bit 47 to make the address canonical. Panics if the bits in the range 48 to 64 contain data (i.e. are not null and no sign extension).
pub fn try_new(addr: u64) -> Result<VirtAddr, VirtAddrNotValid>
[src]
Tries to create a new canonical virtual address.
This function tries to performs sign extension of bit 47 to make the address canonical. It succeeds if bits 48 to 64 are either a correct sign extension (i.e. copies of bit 47) or all null. Else, an error is returned.
pub const fn new_unchecked(addr: u64) -> VirtAddr
[src]
Creates a new canonical virtual address without checks.
This function performs sign extension of bit 47 to make the address canonical, so
bits 48 to 64 are overwritten. If you want to check that these bits contain no data,
use new
or try_new
.
pub const fn zero() -> VirtAddr
[src]
Creates a virtual address that points to 0
.
pub const fn as_u64(self) -> u64
[src]
Converts the address to an u64
.
pub fn from_ptr<T>(ptr: *const T) -> Self
[src]
Creates a virtual address from the given pointer
pub fn align_up<U>(self, align: U) -> Self where
U: Into<u64>,
[src]
U: Into<u64>,
Aligns the virtual address upwards to the given alignment.
See the align_up
function for more information.
pub fn align_down<U>(self, align: U) -> Self where
U: Into<u64>,
[src]
U: Into<u64>,
Aligns the virtual address downwards to the given alignment.
See the align_down
function for more information.
pub fn is_aligned<U>(self, align: U) -> bool where
U: Into<u64>,
[src]
U: Into<u64>,
Checks whether the virtual address has the demanded alignment.
pub fn page_offset(&self) -> PageOffset
[src]
Returns the 12-bit page offset of this virtual address.
pub fn p1_index(&self) -> PageTableIndex
[src]
Returns the 9-bit level 1 page table index.
pub fn p2_index(&self) -> PageTableIndex
[src]
Returns the 9-bit level 2 page table index.
pub fn p3_index(&self) -> PageTableIndex
[src]
Returns the 9-bit level 3 page table index.
pub fn p4_index(&self) -> PageTableIndex
[src]
Returns the 9-bit level 4 page table index.
Trait Implementations
impl Add<u64> for VirtAddr
[src]
type Output = Self
The resulting type after applying the +
operator.
fn add(self, rhs: u64) -> Self::Output
[src]
impl AddAssign<u64> for VirtAddr
[src]
fn add_assign(&mut self, rhs: u64)
[src]
impl Clone for VirtAddr
[src]
fn clone(&self) -> VirtAddr
[src]
fn clone_from(&mut self, source: &Self)
1.0.0[src]
impl Copy for VirtAddr
[src]
impl Debug for VirtAddr
[src]
impl Eq for VirtAddr
[src]
impl Ord for VirtAddr
[src]
fn cmp(&self, other: &VirtAddr) -> Ordering
[src]
#[must_use]
fn max(self, other: Self) -> Self
1.21.0[src]
#[must_use]
fn min(self, other: Self) -> Self
1.21.0[src]
#[must_use]
fn clamp(self, min: Self, max: Self) -> Self
[src]
impl PartialEq<VirtAddr> for VirtAddr
[src]
impl PartialOrd<VirtAddr> for VirtAddr
[src]
fn partial_cmp(&self, other: &VirtAddr) -> Option<Ordering>
[src]
fn lt(&self, other: &VirtAddr) -> bool
[src]
fn le(&self, other: &VirtAddr) -> bool
[src]
fn gt(&self, other: &VirtAddr) -> bool
[src]
fn ge(&self, other: &VirtAddr) -> bool
[src]
impl StructuralEq for VirtAddr
[src]
impl StructuralPartialEq for VirtAddr
[src]
impl Sub<VirtAddr> for VirtAddr
[src]
type Output = u64
The resulting type after applying the -
operator.
fn sub(self, rhs: VirtAddr) -> Self::Output
[src]
impl Sub<u64> for VirtAddr
[src]
type Output = Self
The resulting type after applying the -
operator.
fn sub(self, rhs: u64) -> Self::Output
[src]
impl SubAssign<u64> for VirtAddr
[src]
fn sub_assign(&mut self, rhs: u64)
[src]
Auto Trait Implementations
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,