У меня есть массив структур, определенных ниже:
struct {
int x;
char y;
} arr[10];
Размер int на моей машине составляет 4 байта, а размер char - 1 байт. Я знаю, что структуры будут заполнены внутренне, т.е. каждый элемент массива будет иметь размер 8 байтов. Но я хочу знать, есть ли
1) Это связано с требованием выравнивания члена типа int в следующем элементе массива или
2) Причина в том, что каждая структура должна быть выровнена по 8-байтовой границе из-за требования естественного выравнивания для переменной типа структуры.
Чтобы прояснить мою точку зрения, каким должен быть начальный адрес первого члена массива? Если это 8-байтовый выровненный адрес, как указано во втором случае, это может быть проблемой при определении больших двумерных массивов, таких как:
int arr [1000] [1000];
Здесь каждый элемент двумерного массива (т.е. каждый одномерный массив) должен быть выровнен по границе в 4000 байт. У машины может не быть дыры в памяти для выполнения этого требования к памяти.