Внутри структуры смещение каждого элемента в памяти зависит от их размера и выравнивания.Обратите внимание, что это зависит от реализации
Например, если char
занимает 1 байт, short
занимает 2 байта и int
занимает 4 байта:
structure Node{
char c1; // 1 byte
// 1 byte padding (next member requires 2 byte alignment)
short s1; // 2 bytes
char c2; // 1 byte
// 3 bytes padding (since next member requires 4 byte alignment)
int i1; // 4 bytes
};
Это также зависит от вашего компиляторанастройки и архитектуру, а также могут быть изменены.
Если вы правильно упаковали эту структуру (переставив порядок элементов), вы можете поместить ее в 8 байтов, а не в 12 байтов (переключая c2 с помощью s1).
Причиной принудительного выравнивания является то, что аппаратное обеспечение может быстрее выполнять определенные операции с данными, имеющими естественное выравнивание;в противном случае для создания данных перед его обработкой потребуется выполнить некоторую битовую маскировку, сдвиг и ORing.