计算有结构的结构的尺寸

calculate size of structure that has structure with in it

本文关键字:结构 计算      更新时间:2023-10-16

我有一个结构体,比如:

struct sub_struct
{
 short  int  alpha; //2 bytes
 short  int  beta;
 short  int gamma;
}
struct big_struct
{
 char movie;
 char songs;
 short int release;
 sub_struct temp_struct[ 4 ];
}

在代码的某个地方我需要检查sizeof struct因此我在header中定义了如下内容:

const int LEN_BIG_STRUCT = sizeof( big_struct );

现在我的问题是LEN_BIG_STRUCT也包括sub_struct的大小,还是我需要定义子结构的大小?如果是,我该怎么办?

想象big_struct是一个篮子,你在里面放了一个更小的篮子,sub_struct

如果你现在把一个大篮子和一个小篮子放在秤上;如果重量不包括小篮子的重量,你会有点惊讶,不是吗?

这是一件好事sizeof做预期的…


换句话说……

是的,sizeof给出了其操作数的对象表示中所包含的总字节数;包括任何可能的填充。


以下是c++标准对sizeof的描述:

当应用于类时,结果是该类对象中的字节数,包括在数组中放置该类型对象所需的任何填充。

注意:操作符在c中的工作方式相同。


sizeof(x)返回变量或类型x的总字节数。


在你的例子中:

  • small_struct:共6字节(每个short int 2个)。
  • big_struct: 2 char和1 short,以及一个数组small_struct总计24字节(4个元素* 6个字节)。

所以sizeof(big_struct)返回28作为总字节数。

要回答你的问题,你不需要定义small_struct的大小,因为sizeof()添加了结构体中包含的所有字节,就像philip rossamen在他的回答中所说的。


注意: 如下面所述,big_struct28字节不是在所有系统上通用的。这是由于c中的数据填充,你可以在下面读到一点:

  • http://learn.hackerearth.com/tutorial/dynamic-programming/31/structure-padding-and-data-packing/
  • http://fresh2refresh.com/c/c-structure-padding/