2015-02-05 4 views
0

Мне любопытно узнать о том, как #pragma поможет избежать заполнения текстуры (просьба дать мне одну программу, чтобы понять ее).Как избежать заполнения структуры?

По умолчанию компиляторы будут распределять память в соответствии. Таким образом, избегая добавления структуры, что получит программист benifit? Когда необходимо избегать заполнения структуры?

+3

Это не является частью стандарта C, но компиляторы имеют возможности для его обработки в качестве расширений. Однако разные компиляторы делают это по-другому, и если вам нужна помощь, вы должны сказать нам, какой компилятор вы используете. Вы также можете сказать нам, почему вы этого хотите. –

+2

Совет: вы не хотите, вам это не нужно. Избегайте этого, если это абсолютно необходимо. – joop

+0

см. Это http://stackoverflow.com/questions/5397447/struct-padding-in-c – VolAnd

ответ

2

Методы зависят от компилятора.

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

На практике стоимость сокращается или исключается из-за аппаратного обеспечения. Обычными целями заполнения являются производительность и исключение аппаратных исключений путем выравнивания элементов структуры таким образом, который подходит для хост-системы. Запрет заполнения в основном отключает все преимущества отступов.

Сохранение нескольких байтов, или даже нескольких килобайт, редко стоит того, чтобы повлиять на производительность или дополнительные условия ошибки. Если вы выполняете определенные типы разработки (например, на встроенной системе с ограниченными ресурсами), это может быть полезно, но даже тогда не всегда.

+0

В встроенной системе больше преимуществ упаковки структуры, чем просто экономия места. Например, вы могли получить массив упакованных байтов через связь и хотите интерпретировать его. Вместо того, чтобы копировать и преобразовывать байты, вы можете просто передать его структуре и использовать поля. Конечно, вы должны убедиться, что Endianness и MSB идентичны с сообщением и процессором, что позволяет получить неравномерный доступ. – ifyalciner

1

1.Настройка структуры не допускается, главным образом, в случае критически важных встроенных систем. В этом случае ОЗУ сохраняется путем упаковки элементов структуры за счет памяти кода (для доступа к члену упакованной структуры требуется больше инструкций).

  1. В некоторых случаях массив байт сопоставляется с элементами структуры для удобства доступа.
1

структура paddding можно избежать с помощью директивы препроцессора #pragma 1 компилятор alocate памяти в упаковке одного

Смежные вопросы