Say I need to allocate struct A but b needs to be 4 aligned.
struct A
b
struct A { char a; char b[42]; };
I guess I can manually pad a pointer returned by malloc(). Any cleaner way? Like gcc's __attribute__((aligned(4))) but that aligns the whole structure. And I can't change it's layout.
malloc()
__attribute__((aligned(4)))
... but that aligns the whole structure
Member alignment effectively builds on top of the structure base alignment, so you need the structure alignment to be alignas(4) in any case.
And I can't change it's layout.
If you can't add padding between a and b, so you need "a" on a weird base alignment you're definitely "off the grid" in terms of standard features the language can provide. If you must do this, then I think you're going to have to pad malloc return pointers by hand.