#[repr(align(64))]pub struct CachePadded<T>(/* private fields */);
Expand description
Aligns the wrapped value to the size of a cache line.
This is used to avoid false sharing for values that may be accessed concurrently.
§Size/Alignment
The size and alignment of this type depends on the target architecture,
and on whether or not the no-cache-pad
feature flag is enabled.
When the no-cache-pad
crate feature flag is enabled, this is simply a
no-op wrapper struct. This is intended for use on useful for platforms
with no data cache, such as many Cortex-M targets.
In other cases, this type is always aligned to the size of a cache line,
based on the target architecture. On x86_64
/aarch64
, a cache line is
128 bytes. On all other targets, a cache line is assumed to 64 bytes
long. This type’s size will always be a multiple of the cache line size;
if the wrapped type is longer than the alignment of a cache line, then
this type will be padded to multiple cache lines.
Implementations§
Source§impl<T> CachePadded<T>
impl<T> CachePadded<T>
Sourcepub const fn new(value: T) -> CachePadded<T>
pub const fn new(value: T) -> CachePadded<T>
Pads value
to the length of a cache line.
Sourcepub fn into_inner(self) -> T
pub fn into_inner(self) -> T
Unwraps the inner value and returns it.
Trait Implementations§
Source§impl<T> Clone for CachePadded<T>where
T: Clone,
impl<T> Clone for CachePadded<T>where
T: Clone,
Source§fn clone(&self) -> CachePadded<T>
fn clone(&self) -> CachePadded<T>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more