У меня есть структура с тремя полями, определенными следующим образом:
struct tmp {
char *ptr;
unsigned int data1;
unsigned int data2;
};
После компиляции с GCC в 64-битной системе с использованием процессора Intel Sandybridge, sizeof (tmp) возвращает 24.
Насколько я понимаю, компилятор добавляет 4 байта в оба поля "unsigned int".Однако, может ли быть лучше, если нет отступов и полученная структура имеет размер 16?
Представьте, что если существует массив таких структур, то если заставить структуру иметь размер 16, убедитесь, что в массиве нет единой структуры, разделяемой по строкам кэша, поскольку размер строки кэша равен 64.байты для процессоров Intel SandyBridge.Таким образом, уменьшается возможность иметь два обращения к памяти для получения такой структуры при циклическом просмотре массива.