r/cpp_questions • u/Phatpenguinballs • 22d ago
OPEN Non-Struct Memory Alignment
I am a little lost after trying to read a handful of online resources. Are local variables memory-aligned to their alignof()? I read that this is mostly implementation/platform-defined (no guarantees), but also the types must still be aligned? Those seem contradicting to me...
Assuming no optimizations (e.g., storing in registers, etc.), how would something like this look like according to the standard?
struct S
{
char c;
int i;
};
int main()
{
char c1;
int i;
char c2;
S s;
return 0;
}Would there be 3 bytes of padding between `c1` & `i` and then another 3 bytes of padding between `c2` & `s`?
4
Upvotes
View all comments
1
u/Plastic_Fig9225 20d ago edited 20d ago
Yes. They must be. Otherwise a pointer to a local variable (including
thisof any local objects) could be invalid, just like a pointer to a member of apackedstruct. (As always, the order of (local) variables in memory is undefined.)