Я примирлы код в кл.
Пробую с ++.
Не достаточно хорошо со сборкой, чтобы сказать себе. Но улучшается.
Классы struct AND выигрывают от упаковки структур в c ++ или это всего лишь секрет?
С ++ добавляет много магии?
Будет ли частный / защищенный / публичный сегменты испортить все?
Спасибо
Сначала есть два разных термина data structure alignment
а также data structure padding
,
Выравнивание данных означает размещение данных со смещением памяти, равным некоторому кратному размеру слова, что повышает производительность системы благодаря тому, как процессор обрабатывает память.
Чтобы выровнять данные, может быть необходимо вставить несколько бессмысленных байтов между концом последней структуры данных и началом следующей, которая является заполнением структуры данных.
На ваш вопрос "Do struct AND classes benefit from structure packing in c++"
Хотя C и C ++ не позволяют компилятору переупорядочивать элементы структуры для экономии места, другие языки могут. Также можно сказать most C and C++ compilers to "pack" the members
структуры до определенного уровня выравнивания, например «pack (2)» означает выравнивание элементов данных размером больше байта с двухбайтовой границей, так что любые элементы заполнения имеют длину не более одного байта.
Изменяя порядок элементов в структуре, можно изменить количество отступов, необходимое для поддержания выравнивания. Например, если элементы отсортированы по убыванию требований выравнивания, требуется минимальное количество отступов, что означает размещение элементов в структуре с наибольшим в начале.
Структура C ++ на 100% обратно совместима со структурой C. Все те же правила применяются. А класс — это просто структура, в которой по умолчанию используется значение private, а не public. Так что те же правила все еще применяются. Вы получаете все члены struct / class в порядке, указанном с применением нормальных правил выравнивания C и отступов.
Но не говорите компилятору упаковывать вашу структуру или класс. Дополнительный отступ, обычно добавляемый компилятором, означает, что к элементам можно получить доступ быстрее. Для упакованных структур требуется больше времени процессора для доступа к членам (в основном на x86 / amd64) или более сложный код для выполнения выравниваемого доступа (почти для любого другого процессора).
Единственная веская причина для упакованных структур — хранение структуры в файлах или передача их по сети, где различные правила выравнивания и заполнения разных систем могут привести к несовместимости. Если вам это нужно, то упакуйте данные в упакованную структуру как можно позже перед сохранением / отправкой и распакуйте их в неупакованную структуру как можно скорее после чтения / получения. Вы можете сделать обращение к порядку байтов одновременно.