Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
1 / 1 / 2
Регистрация: 23.03.2011
Сообщений: 8

Размер структуры

14.04.2011, 17:56. Показов 2120. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Дорогие форумчане, помогите если не трудно. такая проблема:
есть структура:
C++
1
2
3
4
5
6
7
8
9
10
11
typedef struct {
 
  unsigned char  P1;
  unsigned long  P2;
  unsigned short P3;
  unsigned char  P4;
  unsigned char  P5;
 
  } My_struct;
 
My_struct My_struct_1;
Почему, когда я в одной из функций вызываю:
C++
1
MessageBox(0,(IntToStr(sizeof(My_struct_1))).c_str(),"Info",MB_OK);
Отображается сообщение: 12.
Ведь у меня ((char = 1)x3 + (long = 4) + (short = 2)) = 9. Откуда 12-то взялось?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.04.2011, 17:56
Ответы с готовыми решениями:

Непонятный размер объявленной структуры
Даже если отключить выравнивание границ структуры struct ConfigMenuItem { char Litera; // 1 байт float yMax; // 4...

Размер структуры в которой есть динамический массив
в общем если есть такая структура struct Mt { int x; int y; int **matrix; } m; то сколько памяти...

Какой приблизительно размер добавляемого компонента и влияет ли он на размер самой программы
Здравствуйте, меня интересует вопрос, когда создаешь какой нить компонент, какой приблизительно его размер и влияет ли он на размер самой...

2
Тутошний я
 Аватар для Grey
2147 / 1202 / 225
Регистрация: 03.11.2009
Сообщений: 4,424
Записей в блоге: 2
14.04.2011, 21:39
До этого как то не задумывался о размерах.
Попробовал в разных вариантах.
(long = 4) + (short = 2) дало 8
(char = 1)+ (long = 4) + (short = 2) дало 12
Видимо оно всё складывает, а потом округляет до long.
Незнаю почему так.

Добавлено через 4 минуты
P.S.
(char = 1)x3 + (long = 4) = 12
(char = 1)x3 + (short = 2) = 6
0
1 / 1 / 2
Регистрация: 23.03.2011
Сообщений: 8
15.04.2011, 15:58  [ТС]
Странная математика...

Проверяю каждый параметр по отдельности. Все в порядке.
C++
1
2
3
4
5
MessageBox(0,(IntToStr(sizeof(My_struct_1.P1))).c_str(),"ok",MB_OK);
MessageBox(0,(IntToStr(sizeof(My_struct_1.P2))).c_str(),"ok",MB_OK);
MessageBox(0,(IntToStr(sizeof(My_struct_1.P3))).c_str(),"ok",MB_OK);
MessageBox(0,(IntToStr(sizeof(My_struct_1.P4))).c_str(),"ok",MB_OK);
MessageBox(0,(IntToStr(sizeof(My_struct_1.P5))).c_str(),"ok",MB_OK);
Мистика!

Добавлено через 2 часа 25 минут
Усе, разобрался!

В настройках компилятора Data alignment по умолчанию стояло Quad word.
Получается 1 чар (1 байт) запихнули в блок из 4 байт, далее следует 4 байтовый лонг, он не влезает в первый блок, поэтому берется следующий, а размер из-за этого увеличивается. Соответственно, остальное все влезает нормально в третий блок.

Вот так вот байда.

Лечение для C++ Builder 6: Projects->Options...->Advanced Compiler->Data alignment->Byte

теперь работает все как надо))
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.04.2011, 15:58
Помогаю со студенческими работами здесь

Автоматически изменять размер объектов Image под размер формы
Как сделать чтобы после запуска программы в C++ Builder можно было изменить размер формы, и размер объектов Image автоматически изменялся...

MediaPlayer: подстроить размер видео под размер панели
Привет всем, у меня возникла парочка вопросов по настройке компонента MediaPlayer: Во первых как сделать так чтоб видео подстроилось...

Изменять размер панели под размер причаливаемых окон
Имеется панель, которая выравнена относительно главного окна как alLeft. На панель причаливаются и отчаливаются другие окна фиксированного...

Размер структуры?
Здравствуйте, дорогие форумчане! Есть доп. зд - подсчитать размер структуры. Только я очень слабо понимаю где , что и как делать:wall: ...

Размер структуры
Всем доброго дня! Не могу понять... Вот код. struct T { char i; int a; int b; int c; char j;


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru