Использование struct padding - PullRequest
4 голосов
/ 03 января 2011

Какая польза от структуры заполнения в C?

Ответы [ 2 ]

12 голосов
/ 03 января 2011

Некоторые архитектуры будут работать лучше, если будут выполняться только выровненные обращения, поэтому размещение 32-битных объектов на 32-битных границах и 64-битных объектов на 64-битных границах может повысить скорость вашего приложения.

Некоторые архитектуры совершенно неспособны осуществлять несогласованные доступы, и на этих архитектурах отсутствие заполнения может стать настоящей катастрофой.

3 голосов
/ 03 января 2011

См. Эту статью в Википедии для получения дополнительной информации, но в основном это для того, чтобы убедиться, что структура занимает точное число байтов - что, как утверждает Steve314, означает, что sizeof является точным кратным выравнивания.

Под выравниванием данных подразумевается размещение данных со смещением в памяти, кратным некоторому кратному размеру слова, что повышает производительность системы благодаря тому, как процессор обрабатывает память. Для выравнивания данных может потребоваться вставить несколько бессмысленных байтов между концом последней структуры данных и началом следующей, которая является заполнением структуры данных.

Вы также должны знать, что, хотя программисту было очень важно знать об этом, теперь стало меньше, потому что он часто обрабатывается компилятором для вас. Хотя будут опции компилятора, которые позволят вам контролировать процесс.

...