Struct x86_64::VirtAddr
[−]
[src]
#[repr(C)]pub struct 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]
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).
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.
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
.
fn as_u64(self) -> u64
[src]
Converts the address to an u64
.
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.
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.
fn page_offset(&self) -> u12
[src]
Returns the 12-bit page offset of this virtual address.
fn p1_index(&self) -> u9
[src]
Returns the 9-bit level 1 page table index.
fn p2_index(&self) -> u9
[src]
Returns the 9-bit level 2 page table index.
fn p3_index(&self) -> u9
[src]
Returns the 9-bit level 3 page table index.
fn p4_index(&self) -> u9
[src]
Returns the 9-bit level 4 page table index.
Trait Implementations
impl Clone for VirtAddr
[src]
fn clone(&self) -> VirtAddr
[src]
Returns a copy of the value. Read more
fn clone_from(&mut self, source: &Self)
1.0.0[src]
Performs copy-assignment from source
. Read more
impl Copy for VirtAddr
[src]
impl PartialEq for VirtAddr
[src]
fn eq(&self, __arg_0: &VirtAddr) -> bool
[src]
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, __arg_0: &VirtAddr) -> bool
[src]
This method tests for !=
.
impl Eq for VirtAddr
[src]
impl PartialOrd for VirtAddr
[src]
fn partial_cmp(&self, __arg_0: &VirtAddr) -> Option<Ordering>
[src]
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, __arg_0: &VirtAddr) -> bool
[src]
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, __arg_0: &VirtAddr) -> bool
[src]
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, __arg_0: &VirtAddr) -> bool
[src]
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, __arg_0: &VirtAddr) -> bool
[src]
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl Ord for VirtAddr
[src]
fn cmp(&self, __arg_0: &VirtAddr) -> Ordering
[src]
This method returns an Ordering
between self
and other
. Read more
fn max(self, other: Self) -> Self
1.22.0[src]
Compares and returns the maximum of two values. Read more
fn min(self, other: Self) -> Self
1.22.0[src]
Compares and returns the minimum of two values. Read more
impl Debug for VirtAddr
[src]
impl Add<u64> for VirtAddr
[src]
type Output = Self
The resulting type after applying the +
operator.
fn add(self, rhs: u64) -> Self::Output
[src]
Performs the +
operation.
impl AddAssign<u64> for VirtAddr
[src]
fn add_assign(&mut self, rhs: u64)
[src]
Performs the +=
operation.
impl Sub<u64> for VirtAddr
[src]
type Output = Self
The resulting type after applying the -
operator.
fn sub(self, rhs: u64) -> Self::Output
[src]
Performs the -
operation.
impl SubAssign<u64> for VirtAddr
[src]
fn sub_assign(&mut self, rhs: u64)
[src]
Performs the -=
operation.
impl Step for VirtAddr
[src]
fn steps_between(start: &Self, end: &Self) -> Option<usize>
[src]
🔬 This is a nightly-only experimental API. (step_trait
)
likely to be replaced by finer-grained traits
Returns the number of steps between two step objects. The count is inclusive of start
and exclusive of end
. Read more
fn replace_one(&mut self) -> Self
[src]
🔬 This is a nightly-only experimental API. (step_trait
)
likely to be replaced by finer-grained traits
Replaces this step with 1
, returning itself
fn replace_zero(&mut self) -> Self
[src]
🔬 This is a nightly-only experimental API. (step_trait
)
likely to be replaced by finer-grained traits
Replaces this step with 0
, returning itself
fn add_one(&self) -> Self
[src]
🔬 This is a nightly-only experimental API. (step_trait
)
likely to be replaced by finer-grained traits
Adds one to this step, returning the result
fn sub_one(&self) -> Self
[src]
🔬 This is a nightly-only experimental API. (step_trait
)
likely to be replaced by finer-grained traits
Subtracts one to this step, returning the result
fn add_usize(&self, n: usize) -> Option<Self>
[src]
🔬 This is a nightly-only experimental API. (step_trait
)
likely to be replaced by finer-grained traits
Add an usize, returning None on overflow