Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700

Выравнивание данных в структурах

02.12.2017, 16:43. Показов 1461. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть такая структура:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
struct SomeStruct
{
    int n1;
    char c1;
    short n2;
    
};
 
int main()
{
    std::cout << sizeof(SomeStruct);//8
}
http://rextester.com/VAB22825

Размер структуры 8. Вроде должно быть 12. В структурах выравнивание ведь происходит по самому длинному полю?
А вот если int и char поменять местами то будет 12. Может кто нибудь объяснить почему так происходит?


C++
1
2
3
4
5
6
7
8
9
10
11
12
struct SomeStruct
{
    char c1;
    int n1;
    short n2;
    
};
 
int main()
{
    std::cout << sizeof(SomeStruct);//12
}
http://rextester.com/CKBWF95243

Пока думаю что из за того что char не требует выравнивание.

Добавлено через 2 минуты
То есть когда char идет первым, после него добавляется 3 байта паддинга.
Далее идет int который 4 байта итого 8. Так как есть выравнивание, перед short ставится 2 байта и того 12.

А в первом случае сначала идет int, затем char который не требует выравнивание, далее идет short и т.к он начинается с четного адреса выравнивания не происходит.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.12.2017, 16:43
Ответы с готовыми решениями:

Где почитать о динамических структурах данных
Дайте ссылку на книгу где доходчиво объясняются темы (С++) : 1.Динамические структуры данных 2.Односвязный и двусвязный список

Методы поиска в различных структурах данных
у мя просьба,есть ли методы поиска???(с++/алгоритмы):read: 1)Таблица символов, 2)Деревья бинарного поиска, 3)Хеширование. заранее...

Поиск литературы о структурах данных с примерами на C++. Для новичков
Господа модераторы, посмотрел прилепленную тему с литературой и на нашёл там указаний, в каких книгах содержится информация о структурах...

2
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
02.12.2017, 16:46
C++
1
2
3
4
5
6
7
struct SomeStruct
{
    int n1; // 4 байта
    char c1; // 1+1 выравнивание, чтобы далее разместить short
    short n2; // 2 байа
    
};
C++
1
2
3
4
5
6
7
struct SomeStruct
{
    char c1; // 1+3 чтобы разместить int
    int n1; //4
    short n2; //2+2 чтобы выровнять всю структуру
    
};
1
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
02.12.2017, 16:52  [ТС]
zss,
Вот насчет первого случая сомневаюсь.
Я думаю в первом случае вообще никакого выравнивания не происходит.
C++
1
2
3
4
5
6
7
struct SomeStruct
{
    int n1; // 4 байта
    char c1; // т.к вышестоящий int заканчивается на четный адрес, адрес этого char нечетный
    short n2; // а этот short автоматически начинается с четного адреса и таким образом не требует выравнивание. с четного //потому, что предыдущее значение было расположено по нечетному адресу
    
};
Потому что выравнивание в структурах вроде как работает по по самому длинному полю. А самое длинное поле в этой структуре int который весит 4 байта. Как тогда получается // 1+1 выравнивание, чтобы далее разместить short?
Должно же быть +3 перед short-ом. не?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.12.2017, 16:52
Помогаю со студенческими работами здесь

Написать функцию перестановки данных в двух структурах, передаваемых по ссылке.
Написать функцию перестановки данных в двух структурах, передаваемых по ссылке. Проверить ее работоспособность.

Обработка данных в структурах "Студент"
Задача 1. При решении задачи требуется реализовать тип данных struct, соответствующий варианту индивидуального задания, включив в структуру...

Выравнивание данных
Итак, как всем известно, обычно тип double занимает 8 байт. Тип char занимает 1 байт (char - 9 байт). Структура вида: struct A { ...

Рекурсия в структурах
struct Element { Element *next; Element *prev; List Sub; }; class List { public:

Строки в структурах
Добрый день, объясните пожалуйста мне - начинающему, как в структуре можно обратиться к строке. Например структура: struct Record { ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru