Привет.
Гуглил (habr, доклады, stackoverflow), но в силу строгого и не совсем однозначного изложения непонятно как/где оно может поломаться, и каким образом это предотвратить/исправить. Вроде понял, что в MSVC этой проблемы нету (не считая перекрывающихся областей под личное обязательство разработчика на пару с restrict).. у GCC, вроде, ключи есть, которые "гарантируют/не гарантируют".. Интересует в контексте C99 (но тут стандарт скромничает).
к примеру, всегда делал так:
PBYTE pByte = memory_alloc( ... );
struct header {
DWORD data_1;
DWORD data_2;
BYTE data_other[];
} *s = (struct header *)pByte;
..но теперь сомневаюсь - не учудит ли оптимизатор, при сборке в GCC? Или "
char*" туда/сюда можно безболезненно каст'ить?
В голове каша. Кто понимает, проясните пожалуйста доступным языком эту тему =\
UPD: хм, это можно охарактеризовать как "каламбур типизации", инфа под GCC -
https://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/Optim...
UPD2: в общем, отправная точка этот доклад
https://habrahabr.ru/post/306294/ , и можно медитировать до полного понимания