Почему размер структуры неверен

0

Я просто пытался проверить, как память распределена для объектов структуры, и занимает больше места, что я ожидал. Я использую 64-битные ОС Windows и визуальную студию Microsoft 2010 (я думаю, ее 32-разрядная версия), поэтому можно объяснить, почему ее печать 52 байта?

struct test {
  int year;// should take 4 byte
  string title;// how much bytes would take ? in my case taking 31 bytes ?
  double date;//should take 8 byte
  int month;// should take 4 byte
  } mine;

int main ()
{
 cout << " size is: "<<sizeof(mine);//printing 52 ?
 cout << " size is: "<<sizeof(struct test);//printing 52 ?
  return 0;
}
  • 4
    Компилятор добавляет отступы для выравнивания.
  • 0
    Это string = std::string или что? Если это пользовательский класс / структура, вы должны опубликовать урезанную версию применимого класса (он не должен содержать больше, чем переменные - никаких функций не требуется).
Показать ещё 5 комментариев
Теги:
data-structures

1 ответ

1
Лучший ответ

Обратите внимание, что

sizeof(struct) >= sizeof(its members)

Поскольку каждый член может быть выровнен по нижнему адресу после предыдущего элемента, который удовлетворяет:

mod(address/sizeof(member)) == 0

Например, рассмотрим эту struct:

struct s {
   char c;
   int i[2];
   double d;
}

Память может выглядеть так:

+-------------------------------------------------+
| c |  |  |  | i[0] | i[1] |  |  |  |  | .. v ..  |
+-------------------------------------------------+
     ^  ^  ^                ^  ^  ^  ^
  • 1
    Это действительно должно быть выровнено в его размере? Я считаю, что в целом требования к выравниванию могут быть разными.
  • 0
    @ Ангел, я думаю, ты прав. Я посмотрю на это и отредактирую свой ответ, спасибо.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню