Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Получается, что все от компилятора зависит и нет стандартов... 21.11.05 12:21 Число просмотров: 1618
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman Отредактировано 21.11.05 12:26 Количество правок: 1
|
> Не совсем так. Выравнивание для байта - 1, для слова - 2 и > т.д., таким образом > struct {char a, b, c}; > практически никогда не будет расширяться, если не задать > явный алигн. Надо понимать, что место добавляется не ПОСЛЕ > элемента, а ПЕРЕД. То бишь байту по фигу куда размещаться, > а вот если после байта идет long, то появится дырка для > алигна. Причем структура как бы зациклена (как раз чтобы не > возникало проблем с массивами). То бишь, после последнего > элемента добавляется столько места, чтобы нормально > выравнять первый.
Получается, что все от компилятора зависит и нет стандартов на выравнивание...
(Хотя программисту это не очень то и надо знать.)
Для чего нужно выравнивание - для увеличения скорости работы за счет увеличения скорости доступа к памяти. Елиб не было архитектур на которых выигрыш есть, то никто о выравнивании границ и не говорил, поскольку не было бы пользы кроме вреда - нерачительного использования памяти.
Если после какой-то степени двойки эффект отпадает, то и нечего позря эту память выделять. То есть если эффект после 4 байт пропадает, то нет смысла выравнивать на 8 байтовцю границу, не смотря на "lond double". Глубоко убежден, что мало какие компиляторы доберуться до 8 байтового выравнивания. И что самое удивительное есть такие, которые плюют на слово "long" в сочетании "long double".
Код в циклах многие компиляторы тоже выравнивают на 4-х байтовую границу.
При выравнивании на 8 байтовую может возникнуть только потеря быстродействия из-за трансфера ненужной информации, когда структура передается в качестве аргумента.
Что касается примера, то структуру из трех байтовых элементов очень даже имеет смысл выравнить до слова - ЗНАЧИТЕЛЬНО быстрее будет обрабатываться ее возврат из функции.
|
|
|