2016-04-25 3 views
-1

Я знаю, как работает прокладка структуры, а также необходимость заполнения пустых байтов данных. Заполнение увеличивает производительность h/w, уменьшая количество циклов для получения одинаковых данных. С другой стороны, упаковка позволяет нам помещать данные рядом друг с другом, и, следовательно, ЦП будет (может) использовать несколько циклов для полного извлечения всех данных. Итак, в чем же необходимость упаковки, хотя это снижает производительность. Пожалуйста, предложите некоторые ситуации, когда необходима упаковка. Я предполагаю, что длина слова в h/w составляет 4 байта.Прокладка и упаковка в конструкциях

Благодаря & С уважением Amit Kumar

ответ

2

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

Может также быть полезен для сериализации данных/десериализации, когда вы можете видеть структуру данных более явно (декларативно?), Если она определена в терминах упакованной структуры. Это, однако, часто спорно положение принять, так как memcpy -ную непосредственно между буферами и структур данных, считается плохой практикой многие.

1

Я предполагаю, что под «упаковкой» вы подразумеваете удаление прокладки с использованием нестандартной прагмы или атрибута (например, Gcc __attribute__((packed))). Вы можете сделать две основные причины:

  1. Уменьшить выделение памяти. Если вы будете выделять большое количество объектов, дополнительное выделение из-за заполнения может быть значительным.
  2. Чтобы сделать макет в памяти отражением макета на диске (например, при работе с определенными файловыми форматами) или в конкретном протоколе. Это может позволить напрямую читать и записывать объект структуры, а не иметь дело отдельно с каждым полем. (Порядок байтов в отдельных полях все равно может быть проблемой).

В целом, практика не переносима, и вам следует избегать ее, если у вас нет веской причины.

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

+0

Ницца, но «упаковка» обычно называется группированием объектов, как в случае структуры. Я не совсем понял, что это значит для него. – sjsam

+0

Спасибо за ваш ответ. –

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