Como posso alinhar membro de struct a um limite específico. Uma motivação seria desabilitar o compartilhamento falso.
Considere este exemplo:
use std::sync::atomic::AtomicBool;
pub struct Foo {
id: String,
read: AtomicBool,
#[repr(align(64))]
write: AtomicBool
}
error[E0517]: attribute should be applied to a struct, enum, function, associated function, or union
--> src/lib.rs:5:12
|
5 | #[repr(align(64))]
| ^^^^^^^^^
6 | write: AtomicBool
| ----------------- not a struct, enum, function, associated function, or union
For more information about this error, try `rustc --explain E0517`.
Crie um tipo de wrapper:
Você também deve usar
#[repr(C)]
se estiver interessado em um layout específico; caso contrário, o layout não será especificado.Se não for muito inconveniente, você pode incorporar o bool atômico em sua própria struct com alinhamento adequado.
Se você quiser algum tipo de controle sobre a ordem dos membros na
Foo
struct,repr(C)
ajuda.No exemplo abaixo, brincar com
repr(align(64))
mostra as situações de compartilhamento falso (ou não).