为什么结构尺寸不正确

时间:2014-03-06 11:11:15

标签: c++ c data-structures

我只是试图检查内存如何分配给结构对象,它占用了我预期的更多空间。我正在使用64位Windows操作系统和Mi​​crosoft Visual Studio 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;
}

1 个答案:

答案 0 :(得分: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 ..  |
+-------------------------------------------------+
     ^  ^  ^                ^  ^  ^  ^