Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
tasty_sock
132 / 131 / 2
Регистрация: 26.01.2010
Сообщений: 351
#1

Странный размер структуры - C++

16.02.2012, 12:57. Просмотров 538. Ответов 3
Метки нет (Все метки)

Привет.

Есть структура
C++
1
2
3
4
5
6
7
8
9
10
11
typedef struct t_ANDNonDirectionalBeacon
{
  unsigned long track_id;
  unsigned long id;
  char name[35];
  double lat;
  double lon;
  float frequency;
  char call_sign[10];
  char work_time[20];
} t_ANDNonDirectionalBeacon;
Почему sizeof(t_ANDNonDirectionalBeacon) равен 96, а не 93?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2012, 12:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Странный размер структуры (C++):

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

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

Размер структуры KEYBOARD_ATTRIBUTES - C++
Пытаюсь портировать с c++ структуру KEYBOARD_ATTRIBUTES ( http://msdn.microsoft.com/ru-RU/library/windows/hardware/ff542326(v=vs.85).aspx )...

Увеличить указатель на размер адресуемой структуры - C++
помогите пожалуйта решить пару задач, задачи не сложные, но я не могу в них разобраться Проиллюстрировать возможности аддитивных...

Увеличить указатель на размер адресуемой им структуры - C++
Увеличить указатель на размер адресуемой им структуры. Буду очень признателен за помощь.

Размер структуры больше суммы размеров ее полей? - C++
Доброго времени суток. Прошу помочь разобраться. Дано - есть такой тестовый код, составленный для проверки подозрения, вынесенного в...

3
CheshireCat
Эксперт С++
2895 / 1244 / 78
Регистрация: 27.05.2008
Сообщений: 3,397
16.02.2012, 13:03 #2
Читай про выравнивание.

На архитектуре IA32 компилятор чаще всего выравнивает члены структур на границу, кратную 4-м байтам. Поэтому вместо 35 байт под name выделяется 36 (последний байт "пропадает" и будет недоступен - образуется "дырка"), а под call_sign - 12 вместо 10 ("дырка" в конце в 2 байта).
1
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
16.02.2012, 13:04 #3
Про выравнивание слышал? Подозреваю, что примерно так (по 4-х байтовой границе):
Код
typedef struct t_ANDNonDirectionalBeacon
{
 unsigned long track_id; 4
 unsigned long id;         4
 char name[35];           36
 double lat;                 8
 double lon;                 8
 float frequency;          4
 char call_sign[10];      12
 char work_time[20];    20
} t_ANDNonDirectionalBeacon;
1
tasty_sock
132 / 131 / 2
Регистрация: 26.01.2010
Сообщений: 351
16.02.2012, 13:05  [ТС] #4
C++
1
2
3
4
5
6
7
8
9
10
11
typedef struct t_ANDNonDirectionalBeacon
{
  unsigned long track_id;
  unsigned long id;
  char name[35];
  double lat;
  double lon;
  float frequency;
  char call_sign[10];
  char work_time[20];
} __attribute((packed)) t_ANDNonDirectionalBeacon;
Спасибо.
0
16.02.2012, 13:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2012, 13:05
Привет! Вот еще темы с ответами:

В файл с помощью структуры записать следующие данные: "название папки, ее размер, дата создания" - C++
Добрый день! Есть файл в нем с помощью структуры надо записать такие данные: "название папки,ее размер, и дата создания". После заполнения...

Определить размер структуры "вручную" - C++
есть структура struct table{ int nomer; string surname; string name; string otch; string adress; string poruch; ...

Помещение структуры в вектор, удаление структуры, изменение элементов структуры - C++
Здравствуйте. Помогите разобраться с тем, как: 1 - находить элементы в векторе зная уникальный элемент структуры. 2 - удалять...

Ввести размер массива с клавиатуры и передать этот размер в конструктор - C++
Я создал массив объектов. И я хочу ввести размер этого массива с клавиатуры, и передать этот размер в конструктор, как мне это сделать? ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru