Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
tasty_sock
 Аватар для tasty_sock
131 / 130 / 2
Регистрация: 26.01.2010
Сообщений: 351
16.02.2012, 12:57     Странный размер структуры #1
Привет.

Есть структура
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?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2012, 12:57     Странный размер структуры
Посмотрите здесь:

C++ Размер структуры больше суммы размеров ее полей?
Увеличить указатель на размер адресуемой структуры C++
Ввести размер массива с клавиатуры и передать этот размер в конструктор C++
Размер структуры KEYBOARD_ATTRIBUTES C++
В файл с помощью структуры записать следующие данные: "название папки, ее размер, дата создания" C++
C++ Странный калькулятор
C++ Увеличить указатель на размер адресуемой им структуры
C++ Определить размер структуры "вручную"
Размер структуры? C++
Странный суп C++
Странный sprintf C++
Размер структуры C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2909 / 1237 / 78
Регистрация: 27.05.2008
Сообщений: 3,318
16.02.2012, 13:03     Странный размер структуры #2
Читай про выравнивание.

На архитектуре IA32 компилятор чаще всего выравнивает члены структур на границу, кратную 4-м байтам. Поэтому вместо 35 байт под name выделяется 36 (последний байт "пропадает" и будет недоступен - образуется "дырка"), а под call_sign - 12 вместо 10 ("дырка" в конце в 2 байта).
Vourhey
Почетный модератор
6470 / 2245 / 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;
tasty_sock
 Аватар для tasty_sock
131 / 130 / 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;
Спасибо.
Yandex
Объявления
16.02.2012, 13:05     Странный размер структуры
Ответ Создать тему
Опции темы

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