![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
т.е. ты считаешь, что размер следующих структур будет разным (при условии sizeof(double) == 8, sizeof(int) == 4)?
|
|||
|
||||
| cupper |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: 1 Всего: 1 |
поспешил я сказать что выравнивание по идет по максимальному типу. Но тут либо я неправильные мануалы читал, либо я из не правильно понял, что вероятнее.
к примеру размер структуры
будет 12байт, тогда я не понимаю смысл выравнивание на 8. Вернее как оно работает в этом случае. Но я правильно сказал что
будет не 5 байт. Она 8 байт, независимо идет ли выравнивание на 4 или на 8, потому что они кратны ? Это сообщение отредактировал(а) cupper - 28.4.2011, 16:51 |
||||
|
|||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
||||
|
||||
| borisbn |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Господа, у меня к Вам, кажется, плохие новости.
вот gcc (или minGW... что там на liveworkspace...):
http://liveworkspace.org/code/2c2d100a5a5e...1ac0e3beb06aa3c а вот в студии 2008:
Это сообщение отредактировал(а) borisbn - 28.4.2011, 17:02 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||
|
|||||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Добавлено через 1 минуту и 24 секунды borisbn, у тебя студия, случаем, не 64-хбитный код генерит? А то есть подозрение, что pragma pack работает только на понижение выравнивания. |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
хммм. тогда как вот это понять ?
http://liveworkspace.org/code/d993132e2828...3646f22214910a1 P.S. Уже в третий раз прошу boostcoder'а высветить на морде liveworkspace'а версию компилятора... Может по русской сказочной традиции он в третий раз улсышит -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| mes |
|
||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
в качестве примера для размышления : http://liveworkspace.org/code/99bfeb182277...ac92132b93409fa
Добавлено через 7 минут и 37 секунд gcc 4.6.0, если не ошибаюсь Это сообщение отредактировал(а) mes - 28.4.2011, 18:29 |
||||||
|
|||||||
| cupper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: 1 Всего: 1 |
так ну всетаки pragma push задает выравнивание полей структуры а не самой структуры. Другое дело как она это делает.
а тут почти все ясно, не считая первого случае, непонятно почему поле char после int выравнивается на размер int, это же не имеет смысла. во втором случае, два чар записались подряд и выравнились по int который следует за ними. в третьем, ну просто все char выравнились по своему размеру в 1 байт. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
как это "поле char ... выравнивается ... " ? выравнивается _стартовый_ адрес поля или размер структуры.. Это сообщение отредактировал(а) mes - 28.4.2011, 21:05 |
|||
|
||||
| cupper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: 1 Всего: 1 |
это так что поле char после int в структуре заняло на 1 байт как положено, а 4, т.е. как бы выровнило адрес для следующего поля структуры (как если бы следующим полем был опять int). Но оно же в данном конкретном случае является последним полем, и непонятно почему так. Если вам это очевидно тогда лучше объясните мне, ибо на все свои вопросы я получаю в ответ так же вопросы |
|||
|
||||
| borisbn |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
нет. у меня и винда и студия 32-х разрядные
хммм. тогда почему там
а у bsa
причём выравнивается, судя по всему либо на 4 либо на 1. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
либо на два
|
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
ага... http://liveworkspace.org/code/4a641cbbf10a...9b0f1aa1504564c чего-то я перестал понимать эту логику -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
пример приведен как контраргумент к высказыванию, что выравнивание никак не зависит от содержимого.. под выравниванием подразумевается расположении с нужным смещением, т.е. не поле растягивается, а следующее за ним сдвигается на некоторое расстояние.. выравнивание размера структуры это косвенный эффект, от выравнивания первого поля следующей структуры, при расположении в массиве.. из за требования непрерывности.. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Вообще-то, я имел в виду, что минимальный размер выравнивания не зависит от размера содержимого. Так как перед этим было высказывание, что мол если есть double, то все остальное тоже будет равняться по 8 байт. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |