I'm writing C++. I have a struct

struct ExampleStruct {
int32_t i;
bool a;
bool b;
}

I know I'm running on a modern CPU such as x86_64 or ARM64, and I know I'm using a modern compiler such as recent clang, recent gcc, or recent msvc.

The byte offsets of "a" and "b", relative to the start of ExampleStruct, are:

4 and 5
30.2%
4 and 8
16.3%
It depends on platform/compiler
44.1%
U gotta use a #pragma
9.4%
Poll ended at .
@mcc int is 4 bytes size, 4 bytes alignment, bools are 1 byte size, 1 byte alignment. the whole struct is 8 bytes size 4 bytes alignment. there's two bytes of padding at the end. mostly this is load bearing abi stuff so it shouldn't really change underneath you, even if it's not strictly specified by the C++ standard (it is specified by the platform ABI).
@dotstdy And "The ABI" in question is what? The Itanium ABI? A coincidental, silent agreement between the Itanium, ARM, and MS ABIs?
@mcc depends on the platform, idk which documents you need to look at to find the answers, but yes probably all three of those are important.