#pragma pack(size)
- это директива препроцессора, используемая для изменения схем заполнения структуры.Обычно структура добавляет байты заполнения между ее членами для ускорения операций извлечения памяти.количество используемых байтов заполнения зависит от архитектуры машины.например,
struct sample {
int a;
char b;
int c;
};
Когда мы видим вышеупомянутую структуру, требуется только 9 байтов (4 + 1 + 4) для хранения членов a, b и c, но для 32-битной архитектуры переменная этогоСтруктура занимает 16 байт (4 + 4 + 4) памяти.даже если для символа b требуется только 1 байт, для хранения значения b и 4 других байтов требуется 4 байта.
padding_size = (word_size of machine architecture > highest sized structure member datatype's size) ? highest sized structure member datatype's size : word_size of machine architecture;
мы можем принудительно назначить размер заполнения, используя директиву препроцессора #pragma pack(size)
, size
должно быть на 2 меньше, чем word_size машинной архитектуры.
Если мы используем как
#pragma pack(1)
для вышеуказанной структуры, то общий объем памяти, необходимый для хранения переменнойтип struct sample
будет (4 + 1 + 4) 9 байтов.