Имеет ли pragmapack () в C-программировании какое-либо применение помимо упаковки структур? - PullRequest
0 голосов
/ 05 декабря 2018

Пока я на собеседовании, интервьюер спросил меня, есть ли другое использование pragmapack () в C, кроме упаковки структур?Поэтому я ответил, что не знаю, кроме структуры упаковки.Так есть ли другое использование этого?

1 Ответ

0 голосов
/ 05 декабря 2018
#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 байтов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...