5 ms·
> Does Rust fundamentally guarantee that if you make a struct, its fields will lay out in memory in the order that you defined them? Can it be used to interact
by Hemospectrum 2y ago
> Does Rust fundamentally guarantee that if you make a struct, its fields will lay out in memory in the order that you defined them? Can it be used to interact with APIs (really ABIs) who expect a C struct (or pointer to one)?
You have to specify this behavior with #[repr(C)]. Otherwise, the compiler will rearrange fields to try to optimize packing and alignment.
- mirashii 2y agoOr, more precisely, reserves the right to do so in a future version. rustc does not currently do this. There are some compiler flags to randomize the struct layout just to make sure that you’re not implicitly depending on the order. https://doc.rust-lang.org/reference/type-layout.html https://doc.rust-lang.org/reference/type-layout.html https://github.com/rust-lang/compiler-team/issues/457 https://github.com/rust-lang/compiler-team/issues/457
- tialaramex 2y ago> Or, more precisely, reserves the right to do so in a future version. rustc does not currently do this Does not currently do what ? Rust certainly will re-arrange the layout of a default repr(Rust) struct to make it smaller, for example: https://rust.godbolt.org/z/7KsqvnE9o https://rust.godbolt.org/z/7KsqvnE9o [Edited to provide a nicer Godbolt example which compares the two layout strategies]
- mirashii 2y agoI stand corrected