C++结构体大小的与自动补位的问题

本文详细介绍了C++中结构体内存对齐的规则,包括每个成员地址的整数倍特性、整体字节数的约束以及实际例子中的应用。通过实例分析了如何计算结构体的大小,涉及到了结构体内的数组、不同数据类型的成员以及嵌套结构体的情况。
摘要由CSDN通过智能技术生成

规律:1). 每一个成员的地址能够被它本身字节数整除;
           2). 最后总的字节数必须能够被最大字节数的成员整除;
           3). 一般可以以地址0为起始地址来考虑。

否则的话就会产生补位。

例如:

typedef struct test
{
char a;             //2bytes
int b;            //1bytes
char d[21];        //20bytes
double f;

};

结果sizeof(test)=4。

实际上,1+(3) + 4 + 21 + (3) + 8  = 40  , 加括号的为对齐填充的。

附:size of int is: 4   size of char is: 1   size of short int is: 2   size of double is: 8   size of unsigned int is: 4   size of float is: 4   size of long double is: 8   size of long int is: 4   size of long int is: 4   size of unsigned char is: 1   size of signed char is: 1   size of unsigned long int is: 4   size of signed int is: 4   size of unsigned short int is: 2   size of signed short int is: 2   size of signed int is: 4   size of signed long int is: 4。

a.成员都相同时(或含数组且数组数据类型同结构体其他成员数据类型)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值