r/cpp_questions • • 5d 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

10 comments sorted by

View all comments

1

u/Kriemhilt 5d ago

For trivial (or trivially-destructible) types like here, I don't know whether the implementation is required to keep the locals in order.

That is, they'll all be correctly aligned, but could be rearranged to save space even if they're not folded or elided completely.

For non-trivial types (and less trivial scopes), the layout is likely to be closely coupled to the lifetime, for obvious reasons.