О выравнивании данных конкретной структуры

0

Это, вероятно, довольно простые вопросы, но я столкнулся с ними, пытаясь решить какую-то проблему Valgrind. По-видимому, ошибка вызвана неинициализированными байтами заполнения на пользовательской структуре. Хотя я уже понял всю концепцию заполнения структуры, я все еще сомневаюсь в том, как управлять выравниванием данных. Я нашел много информации о теме на нескольких сайтах и Q & A прямо здесь, но у меня все еще есть некоторые затяжные сомнения:

Является ли выравнивание по байтам (размер читаемого фрагмента данных) установленным в системном масштабе, выбранным компилятором для всей программы или определенным для каждой структуры в моем коде (и если да, то это жестко закодировано в двоичном формате)? И что конкретно представляет собой отношение к архитектуре системы (32 против 64 бит)? Как я могу найти значение, которое я использую по умолчанию?

Теги:
performance
alignment
build

1 ответ

1

на 32-битной системе - 4 байта, на 64 бит - 8 байт
вы можете изменить выравнивание для определенных структур/классов или получить значение по умолчанию, используя прагма-пакет
Статья MSDN
GCC также поддерживает его

также вы можете узнать значение по умолчанию, объявив одну структуру char и используя sizeof(). он вернет выравниваемый размер.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню