Я узнал, что когда компьютер выравнивает данные в структуре, они добавляют внутренние отступы, потому что они читают память по фиксированному размеру слова.
struct st {
int a;
char b;
long double c;
float d;
};
Предположим, что начальный адрес для этой структуры - p. Тогда a
будет расположен в p, b
будет расположен в p + 4, c
будет расположен в p + 8, а d
будет расположен в p + 24, потому что sizeof(long double) == 16
. Итак, я хочу спросить: когда компьютер читает память и достигает значения p + 8 для чтения c
, как они узнают, что для этого нужно прочитать 16 байтов? Есть ли специальный флаг, который определяет long double
переменную? Или это просто решено компилятором?