计算有结构的结构的尺寸
calculate size of structure that has structure with in it
我有一个结构体,比如:
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
: 2char
和1short
,以及一个数组small_struct
总计24字节(4个元素* 6个字节)。
所以sizeof(big_struct)
返回28
作为总字节数。
要回答你的问题,你不需要定义small_struct
的大小,因为sizeof()
添加了结构体中包含的所有字节,就像philip rossamen在他的回答中所说的。
注意:
如下面所述,big_struct
的28
字节不是在所有系统上通用的。这是由于c中的数据填充,你可以在下面读到一点:
- http://learn.hackerearth.com/tutorial/dynamic-programming/31/structure-padding-and-data-packing/
- http://fresh2refresh.com/c/c-structure-padding/
相关文章:
- 如何计算结构的哈希
- 使用结构数组计算文本文件中单词的出现次数C++
- 从右到左计算当前索引中的数据结构中的元素数,并打印每个元素的计数
- 如何计算结构阵列内的平均值
- 计算地图结构的哈希
- 在包含预计算结果或可计算结果的结构中使用联合
- 使用指针和结构C 计算两个点之间的距离,分割故障问题
- 如何在编译时计算c++11中的结构填充
- 通过更改代码格式来计算结构向量中包含的双精度变量的平均值的不同结果?
- 如何计算C中的结构大小
- 如何计算递归结构
- 准确计算编译器在结构中添加的填充
- 一种按排序顺序保持元素的数据结构,支持快速插入和计算连续元素之间的最大差异
- 使用复合数据结构的最近点计算
- 一个C++结构,它可以提高可读性,计算结果为零,但不是宏
- 用于选择计算机组的数据结构
- 在高性能计算中更好的做法是:将数据结构传递到一个函数或一组变量中
- 如何编写递归函数来计算图形数据结构中的最短路径
- 高效频率计算的数据结构决策.
- 结构化数据:嵌套三角形(使用结构并进行一些几何计算)