Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
2 / 2 / 0
Регистрация: 04.02.2013
Сообщений: 92

Зависимость размера класса от типа данных

19.08.2015, 13:54. Показов 2333. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, вот такой вопрос возник:
Почему 2 класса с одинаковыми типами данных имеют разный размер:

Пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class A {
char b[10];
double a;
int c;
}
 
class B {
double a;
char b[10];
int c;
}
 
int main(){
 
cout<<sizeof(A);//32 байта
cout<<sizeof(B);//24 байта
 
return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.08.2015, 13:54
Ответы с готовыми решениями:

Создание типа данных для чисел определенного размера
Здравствуйте. Столкнулся с проблемой работы с большими числами на разных архитектурах. На х64 размер long = 8. На х32 = 4. Мне нужно что бы...

Как вызвать из одного класса (для метода типа void) метод типа boolean другого класса?
ребят, только учусь и конечно, вопросов возникает много. ситуация вот в чем. есть массив. я должна найти в i-том элементе какую-то...

Размер шрифта в зависимость от размера контейнера
Доброго времени суток. При увеличение странички за предел контейнера заходит текст,собственно это выглядит вот так как можно сделать,...

31
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
19.08.2015, 19:44
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Верно ли утверждение?:
Размер структуры после выравнивания равняется ближайщему кратному размеру найбольшего его типа.
Нет. Не размеру наибольшего типа, а наибольшему выравниванию любого из её членов.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
19.08.2015, 19:50
Цитата Сообщение от castaway Посмотреть сообщение
наибольшему выравниванию любого из её членов.
Цитата Сообщение от castaway Посмотреть сообщение
Ты путаешь размер A (32) с его выравниванием (8)
Как выравнивание может быть больше размера типа? Если адресс 9, ему надо минимум 16 для double. А это 7 байт для double максимум. И кратное 7-и уже бред.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
19.08.2015, 19:59
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Как выравнивание может быть больше размера типа?
Например так:
C++
1
2
3
    char c1 __attribute__(( aligned( 64 ) ));
    char c2 __attribute__(( aligned( 64 ) ));
    std::cout << (&c1 - &c2) << std::endl; // 64
Но это расширение GCC. Да и теоретически, выравнивание может быть вообще любым.
А откуда ты это взял? Я такое где-то говорил?

Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Если адресс 9, ему надо минимум 16 для double. А это 7 байт для double максимум. И кратное 7-и уже бред.
Вот тут не понял. Поясни поподробней.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
19.08.2015, 20:07
Как я вижу логику компилятора:
- Так у меня есть структура
short
char
double

Я не могу записать short в адресс не кратное 2-ум байтам. Далее нужно всунуть будет char - тут любой подойдет. Дальше double - опять же его адресс должен быть кратен 8-и. Следовательно мне нужно взять любое место кратное 2-ойке, записать туда short и char + 5 байт на выравнивение, чтобы double запихнуть, который требует тратности 8-и. Итого надо найти ЛЮБОЙ адресс кратный двум с 16-ью последовательно свободными байтами.

Итого адресс всего размера кратен 8-и, и выравнивание МЕНЬШЕ 8-и == 5. Если больше то зачем вообще такого выравнивае плин.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
19.08.2015, 20:15
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Итого адресс всего размера кратен 8-и, и выравнивание МЕНЬШЕ 8-и == 5. Если больше то зачем вообще такого выравнивае плин.
Адрес "всего" я так понимаю адрес всей структуры.
5 - это так называемые padding-байты, нужные для выравнивание, это не само выравнивание.
В чём вопрос то?
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
19.08.2015, 20:19


Чувствую себя как на экзамене. Где я ошибаюсь то, я расписал как я вижу процесс мышления компилятора
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
19.08.2015, 20:40
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Я не могу записать short в адресс не кратное 2-ум байтам. Далее нужно всунуть будет char - тут любой подойдет. Дальше double - опять же его адресс должен быть кратен 8-и. Следовательно мне нужно взять любое место кратное 2-ойке, записать туда short и char + 5 байт на выравнивение, чтобы double запихнуть, который требует тратности 8-и. Итого надо найти ЛЮБОЙ адресс кратный двум с 16-ью последовательно свободными байтами.
Всё верно.
1
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
19.08.2015, 20:56
Цитата Сообщение от castaway Посмотреть сообщение
это так называемые padding-байты, нужные для выравнивание, это не само выравнивание
тогда почему в данном выражении, где для меня два одинаковых слагаемых - вы ставите не равно?

Добавлено через 10 минут
Колиство песка на воздушном шаре и есть балласт. Почему a != a ?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
19.08.2015, 21:06
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
тогда почему в данном выражении, где для меня два одинаковых слагаемых - вы ставите не равно?
Есть термин padding, а есть термин alignment.
Alignment у double в данном случае всегда будет 8, а padding не всегда 5. И это не одно и то же.

Я специально не цитировал ту строку, где ты 5 назвал выравниванием.
1
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
19.08.2015, 21:16
Верно ли утверждение ?:
Выравнивание любого типа равно его размеру
и
Байтовое выравние в структурах всегда меньше максимальному размеру найбольшего типа
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
19.08.2015, 21:29
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Выравнивание любого типа равно его размеру
Нет. http://ideone.com/olslfu

Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Байтовое выравние в структурах всегда меньше максимальному размеру найбольшего типа
Не понял.
1
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
19.08.2015, 21:40
Цитата Сообщение от castaway Посмотреть сообщение
Нет
Цитата Сообщение от castaway Посмотреть сообщение
Не
Понятно, короче пойду учить PHP.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.08.2015, 21:40

Зависимость размера БД от количество символов в поле
Вечер добрый. Парни, прошу дать консультацию по основе БД: Вопрос 1. Есть текстовое поле базы длинной установленной, например, 20...

Зависимость размера текста от высоты компонента
Подскажите, каким образом можно выбирать размеры текста выводимого, например TextView, в зависимости от длины текста. Компонент должен...

Как убрать зависимость размера ячейки таблицы от размеров изображения?
Здравствуйте. Есть popup форма с описанием. Описание сделано в виде таблицы, в первой строке которой вставлены изображения. В...

Зависимость скорости вытекания воды из сосуда от размера отверстия в сосуде
Исследуйте зависимость скорости вытекания воды из сосуда от размера отверстия в сосуде Приборы и принадлежности: Сосуд с водой,...

Зависимость ссылок от типа конфигурации
У dotNet проекта есть около 10 различных конфигураций. В каждой конфигурации должны использоваться разные dll библиотеки подключаемые как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru