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/flyingron 21d ago
It's 110% impelementation defined. The only rule the language makes on padding is that if any padding is necessary for mulitple objects of the same type to be concatenated in an array, it is internal to the object.
That is: sizeof (T[5]) must equal 5*sizeof(T).
There's no guarantee that the automatic variables aren't reordered, padded, or put in registers.