Let's say I will only be using types with explicit width, e.g. no int but int32, uint16, etc... is it safe to assume that:
A byte will always take 8 bits and will be 8 bit aligned
A short will always take 16 bits and will be 16 bit aligned
An int will always take 32 bits and will be 32 bit aligned
A long int will always take 64 bits and will be 64 bit aligned
A float will always take 32 bits and will be 32 bit aligned
A double will always take 64 bits and will be 64 bit aligned
--- and also optionally those three will best work if:
A 64bit SIMD datatype will always be 8 byte aligned
A 128bit SIMD datatype will always be 16 byte aligned
A 256bit SIMD datatype will always be 32 byte aligned
--- and lastly:
A cache page will always be multiple of 32 bytes // e.g. 32 or 64 bytes
Naturally, I do not imply EVERY hardware platform out there, I am only concerned with x86/x64 and ARM v7/v8