#[repr(packed(1))]pub struct PackedFingerprint(Fingerprint);Expand description
PackedFingerprint wraps a Fingerprint.
Its purpose is to behave like a Fingerprint without alignment requirements.
This may be preferable to use in large collections of structs containing
fingerprints, as it can reduce memory consumption by preventing the padding
that the more strictly-aligned Fingerprint can introduce. An application of
this is in the query dependency graph, which contains a large collection of
DepNodes. As of this writing, the size of a DepNode decreases by 25%
(from 24 bytes to 18) by using the packed representation here, which
noticeably decreases total memory usage when compiling large crates.
(Unalignment was previously restricted to x86 and x86_64 hosts, but is
now enabled by default for all host architectures, in the hope that the
memory and cache savings should outweigh any unaligned access penalty.)
The wrapped Fingerprint is private to reduce the chance of a client
invoking undefined behavior by taking a reference to the packed field.
Tuple Fields§
§0: FingerprintTrait Implementations§
Source§impl Clone for PackedFingerprint
impl Clone for PackedFingerprint
Source§fn clone(&self) -> PackedFingerprint
fn clone(&self) -> PackedFingerprint
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for PackedFingerprint
impl Debug for PackedFingerprint
Source§impl Display for PackedFingerprint
impl Display for PackedFingerprint
Source§impl From<Fingerprint> for PackedFingerprint
impl From<Fingerprint> for PackedFingerprint
Source§fn from(f: Fingerprint) -> PackedFingerprint
fn from(f: Fingerprint) -> PackedFingerprint
Source§impl From<PackedFingerprint> for Fingerprint
impl From<PackedFingerprint> for Fingerprint
Source§fn from(f: PackedFingerprint) -> Fingerprint
fn from(f: PackedFingerprint) -> Fingerprint
Source§impl Hash for PackedFingerprint
impl Hash for PackedFingerprint
Source§impl Ord for PackedFingerprint
impl Ord for PackedFingerprint
Source§fn cmp(&self, other: &PackedFingerprint) -> Ordering
fn cmp(&self, other: &PackedFingerprint) -> Ordering
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl PartialEq for PackedFingerprint
impl PartialEq for PackedFingerprint
Source§impl PartialOrd for PackedFingerprint
impl PartialOrd for PackedFingerprint
impl Copy for PackedFingerprint
impl Eq for PackedFingerprint
impl StructuralPartialEq for PackedFingerprint
Auto Trait Implementations§
impl DynSend for PackedFingerprint
impl DynSync for PackedFingerprint
impl Freeze for PackedFingerprint
impl RefUnwindSafe for PackedFingerprint
impl Send for PackedFingerprint
impl Sync for PackedFingerprint
impl Unpin for PackedFingerprint
impl UnsafeUnpin for PackedFingerprint
impl UnwindSafe for PackedFingerprint
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
Source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 16 bytes