Как избежать проблем с выравниванием

Как избежать проблем с выравниванием

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

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

char dog[10];

char *p = &dog[1];

unsigned long l = *(unsigned long*)p;

В этом примере указатель на данные типа unsigned char используется, как указатель на тип unsigned long, что может привести к тому, что 32-разрядное значение типа unsigned long будет считываться из памяти по адресу, не кратному четырем.

Если вы думаете: "Зачем мне это может быть нужно?", то вы, скорее всего, правы. Тем не менее, если мы такое сделали только что, то такое можно сделать и кто-нибудь еще, поэтому необходимо быть внимательными. Примеры, которые встречаются в реальной жизни, не обязательно будут так же очевидны.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

Как избежать создания некорректного программного кода

Из книги автора

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


Как избежать давления

Из книги автора

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


3.3. Решение проблем

Из книги автора

3.3. Решение проблем 3.3.1. Сообщение Warning: Eepsite Unreachable (Предупреждение: I2P-сайт недоступен) Данное сообщение может появиться, если вы сразу же после установки I2P попытаетесь обратиться к I2P-ресурсам. Дело в том, что ваш шлюз еще не успел подключиться к I2P-сети. Просто подождите


Разделенные транзакции: уникальная возможность избежать Deadlock. Режим AutoCommit

Из книги автора

Разделенные транзакции: уникальная возможность избежать Deadlock. Режим AutoCommit CategoriesDataSet позволяет автоматически подтверждать сделанные изменения, если задать свойство AutoCommit в True. Теперь после вызова метода Post компонент CategoriesDataSet будет автоматически вызывать CategonesTransaction


Решение проблем

Из книги автора

Решение проблем Было время, когда мы чувствовали, что уже готовы уже все бросить, все, кроме работы "в связке". Когда я был ведущим, я старался описать проблему таким образом, чтобы мой партнер мог как можно лучше вникнуть в ее суть. Затем в бой вступал он и боролся, до тех пор,


Как избежать обмана при приеме на работу в Интернете

Из книги автора

Как избежать обмана при приеме на работу в Интернете Интернет позволяет искать работу не отходя от компьютера и работать на дому. Оба этих случая не остались без внимания мошенников. Первый способ напоминает «нигерийские» письма. Объекту предлагается


Как избежать SQL

Из книги автора

Как избежать SQL Добавление инструкций SQL в код VBA чем-то сродни изучению письма, содержащего отрывки на греческом языке, сложные математические вычисления и музыкальное представление. Несмотря на то, что SQL более компактный и узконаправленный язык программирования, чем


29. Используйте перегрузку, чтобы избежать неявного преобразования типов

Из книги автора

29. Используйте перегрузку, чтобы избежать неявного преобразования типов РезюмеНе приумножайте объекты сверх необходимости (Бритва Оккама): неявное преобразование типов обеспечивает определенное синтаксическое удобство (однако см. рекомендацию 40), но в ситуации, когда


Как избежать дублирования в константных и неконстантных функциях-членах

Из книги автора

Как избежать дублирования в константных и неконстантных функциях-членах Использование mutable – замечательное решение проблемы, когда побитовая константность вас не вполне устраивает, но оно не устраняет всех трудностей, связанных с const. Например, представьте, что operator[] в


Как избежать неприятностей при покупке цифровой камеры

Из книги автора

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


Ошибки автофокуса и как их избежать

Из книги автора

Ошибки автофокуса и как их избежать Камера с единственным датчиком в режиме точечного замера может растеряться. К примеру, если в кадре беседуют два или три человека, датчик может сфокусироваться на промежутке между ними. При этом люди на снимке «расплывутся», а фон,


Скорее всего, вам не избежать фазы приёмочного тестирования

Из книги автора

Скорее всего, вам не избежать фазы приёмочного тестирования В идеальном мире Scrum’а результатом каждого спринта должна быть система, потенциально готовая к использованию. Бери и устанавливай, да? А вот и нет!По нашему опыту, такой подход обычно не работает. Там будет куча


Как избежать соблазнительных затрат времени

Из книги автора

Как избежать соблазнительных затрат времени Против некоторых видов непроизводительных затрат времени просто невозможно устоять. Здесь все сводится к правилу «знай меру». Короткая беседа у автомата с газировкой прервет монотонный рабочий день, позволяя вам вернуться


Туннельный синдром запястья: как его избежать

Из книги автора

Туннельный синдром запястья: как его избежать При работе за компьютером может возникнуть еще одна проблема, менее очевидная, однако часто приводящая к серьезным негативным последствиям.«Просто руки отваливаются!» – это обязательно когда–нибудь произносил


Глава 4 Как избежать ошибок при съемке

Из книги автора

Глава 4 Как избежать ошибок при съемке • «Шевеленка»• Смазанный движущийся объект• Наклонный горизонт• Кадрирование• Главный объект не в фокусе• Лишнее в кадре• Из головы растут «рога»• Ошибки при съемке портрета крупным планом на открытом воздухеОшибки, так легко