for optimization purpose,
it adds padding to speed up copying.
But why is something like :
*reinterpret_cast<CSomething*>(buff) = instanceOfCSomething;
has something to do with alignment ?
I'm not sure about the example you've shared, but some platforms have restrictions about alignment, on these platforms your app can crash if you try to read some unaligned data. Other platforms will read the data very slowly if it's unaligned
Me neither. Someone expert is complaining about alignment stuff. Do you have suggestion how to make it aligned ?
The simplest way is to copy the data bytewise into a pointer which is aligned.
Does memcpy(buff, &istanceOfSomething, sizeof(CSomething); work ?
I'm not 100% sure but it seems that when you do reinterpret_cast<CSomething*> you need to get a pointer that is aligned according to the object requirments. Your operator=() has undefined behaviour if it's not the case. So buff needs to be aligned. Or use memcpy. Source:https://stackoverflow.com/questions/32589328/unaligned-access-through-reinterpret-cast
Обсуждают сегодня