Определениепамять - Естественный адрес граница
Структуры обивка представляет собой процесс выравнивания элементов данных структуры в соответствии с правилами выравнивания памяти указанных процессором.
, что это правило выравнивания памяти для процессора Intel x86?
Согласно моему пониманию, естественно адрес граница для процессора Intel-x86 составляет 32 бит каждый (т.е.
addressOffset%4==0
)Так, в процессоре x86,
struct mystruct_A {
char a;
int b;
char c;
};
будет построен as,
struct mystruct_A {
char a;
char gap_0[3]; /* inserted by compiler: for alignment of b using array */
int b;
char c;
char gap_1[3]; /* for alignment of the whole struct using array */
};
что такое правило выравнивания памяти для процессора Intel x86-64?
Согласно моему пониманию, естественно адрес границы для процессора Intel x86-64 составляет 64 бита каждый (т.е.
addressOffset%8==0
)Так, в x86-64 процессора,
struct mystruct_A {
char a;
int b;
char c;
};
будут построены как,
struct mystruct_A {
char a;
char gap_0[7]; /* inserted by compiler: for alignment of b using array */
int b;
char c;
char gap_1[7]; /* for alignment of the whole struct using array */
};
Если вышеуказанное понимание верное, то я хотел бы знать зачем использовать массив int для операции бит?
Рекомендуем использовать данные размера int, как указано here, в котором говорится, что , поскольку наиболее экономичный доступ к памяти имеет доступ к данным размера int.
Вопрос:
Это правило выравнивания памяти что заставляет объявлять данные ИНТ размера для битовых операций?
каждый член должен быть выровнен по своему размеру, char не нуждается в выравнивании, а 4 байта int должны быть выровнены на границе 32 бит. поэтому упорядочение членов по их размерам является одним из способов улучшения памяти. – perreal
@perreal Я сказал то же самое? 'для выравнивания b с использованием массива'. Я имею в виду, 'int b' Вы описали лучше. – overexchange
Твой прореквисте уже не так. Просьба указать ссылку на стандарт, где он налагает это ограничение на заполнение. Обычно это определяется ABI платформы. Что включает в себя ОС, а не только процессор. – Olaf