Это вопрос, возникший в результате ответа Роба Уокера здесь.
Предположим, я объявляю класс/структуру следующим образом:
struct
{
char A;
int B;
char C;
int D;
};
Можно ли предположить, что эти члены будут объявлены именно в таком порядке в памяти, или это зависит от компилятора? Я спрашиваю, потому что всегда предполагал, что компилятор может делать с ними все, что захочет.
Это приводит к моему следующему вопросу. Если приведенный выше пример вызывает проблемы с выравниванием памяти, почему компилятор не может просто неявно превратить это во что-то вроде этого:
struct
{
char A;
char C;
int B;
int D;
};
(В первую очередь я спрашиваю о С++, но мне также было бы интересно услышать ответ C)