Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Выравнивание данных 
:(
    Опции темы
mes
Дата 29.4.2011, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(bsa @  29.4.2011,  10:20 Найти цитируемый пост)
Вообще-то, я имел в виду, что минимальный

а я почему то думал, что то высказывание, в котором засомневался, принадлежит Earnest.. smile

Добавлено через 3 минуты и 3 секунды
Цитата(bsa @  29.4.2011,  10:20 Найти цитируемый пост)
что минимальный размер выравнивания не зависит от размера содержимого. 

хм... а что подразумевается под минимальным размером выравнивания ?



--------------------
PM MAIL WWW   Вверх
Earnest
Дата 29.4.2011, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Цитата(bsa @  29.4.2011,  12:20 Найти цитируемый пост)
 Так как перед этим было высказывание, что мол если есть double, то все остальное тоже будет равняться по 8 байт. 

Я тоже именно на это отвечала


--------------------
...
PM   Вверх
asmdzen
Дата 30.4.2011, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 28.11.2010

Репутация: нет
Всего: 5



встречал такую проблему при обработке транспортных протоколов, заголовок должен быть очень сжат, получается что-то типа:
Код

struct hdr{
char id;
int sess_id;
short len;
char flags;
};


проблема состояла именно в том что я брал размер заголовка при помощи sizeof(hdr), который был неправильным.
PM MAIL   Вверх
volatile
Дата 1.5.2011, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(cupper @  28.4.2011,  16:13 Найти цитируемый пост)
int - первое поле,  размер 4 байта, начинает от 0 байта, выравнивание 8 байт
char - второе поле, размер 1 байт, начинает от 0+8 байт, выравнивание 8 байт. 

Не, не так, чар по-любому будет идти сразу вслед за интом. Если бы там был инт64 вместо чара, тогда да.
Например стркутура из 2-ух чаров, при любом выравнивании будет иметь 2 байта длины.
Выравнивание начинает играть роль тогда, когда размер типа больше выравнивания, например:
struct S {
    char a;
    __int64 b; 
};
при выравнивании 1 - размер стркутуры - 9 байт
при 2 - размер стркутуры - 10 байт
при 4 - размер стркутуры - 12 байт
при 8 - размер стркутуры - 16 байт
и дальше при любом выравнивании, размер будет 16 байт.

Добавлено через 4 минуты и 50 секунд
Упс, сори, тут еще 3 страницы, после того поста, извиняюсь, не заметил.

Добавлено через 11 минут и 34 секунды
Ну прочитал 3 страницы. вобщем-то этой мысли вроде не было. так что оставляю.

PM MAIL   Вверх
cupper
Дата 5.5.2011, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: 1
Всего: 1



Цитата

при 8 - размер стркутуры - 16 байт


большая часть трепа, была как раз по этому поводу.

http://liveworkspace.org/code/46f54a6f9b75...fd6707aa49d1fb9

и на компиляторе VS оно как раз 16.

Экспериментальным путем и путем проб и ошибок вроде бы пришли к мнению что выравнивание везде работает одинаково только для 1, 2, и 4.
PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0470 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.