Выравнивание данных в структуре для длинных двойных - PullRequest
0 голосов
/ 06 октября 2019

Я узнал, что когда компьютер выравнивает данные в структуре, они добавляют внутренние отступы, потому что они читают память по фиксированному размеру слова.

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 переменную? Или это просто решено компилятором?

...