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

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

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

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

char dog[10];

char *p = &dog[1];

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

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

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

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

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

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

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

Из книги Парное программирование: преимущества и недостатки автора Коуберн Алистэр

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


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

Из книги Защита вашего компьютера автора Яремчук Сергей Акимович

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


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

Из книги Компьютер и здоровье автора Баловсяк Надежда Васильевна

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


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

Из книги Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ автора Мейерс Скотт

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


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

Из книги Системное программирование в среде Windows автора Харт Джонсон М

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


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

Из книги Scrum и XP: заметки с передовой автора Книберг Хенрик

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


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

Из книги Тайм-менеджмент для системных администраторов автора Лимончелли Томас

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


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

Из книги Стандарты программирования на С++. 101 правило и рекомендация автора Александреску Андрей

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


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

Из книги Цифровая фотография без Photoshop автора Газаров Артур Юрьевич

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


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

Из книги VBA для чайников автора Каммингс Стив

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


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

Из книги Мир InterBase. Архитектура, администрирование и разработка приложений баз данных в InterBase/FireBird/Yaffil автора Ковязин Алексей Николаевич

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


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

Из книги Анонимность и безопасность в Интернете. От «чайника» к пользователю автора Колисниченко Денис Николаевич

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


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

Из книги Цифровая фотография. Трюки и эффекты автора Гурский Юрий Анатольевич

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


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

Из книги Идеальный программист. Как стать профессионалом разработки ПО автора Мартин Роберт С.

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


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

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

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