关于sizeof结构体大小的问题
我的算法是找出结构体内的最宽数据成员字节数乘以结构体中的成员个数,请问这种算法对吗?(没有多少财富值啦)...
我的算法是找出结构体内的最宽数据成员字节数乘以结构体中的成员个数,请问这种算法对吗?(没有多少财富值啦)
展开
1个回答
展开全部
肯定不对呀
在缺省对齐下我先给你说下三条准则吧,
【1】结构体变量的首地址能够被其最宽基本类型成员的大小所整除
【2】结构体每个成员相对于结构体首地址的偏移量是成员大小的整数背
【3】结构体的总大小为结构体最宽基本类型成员大小的整数背
以上都是结构体中只有基本类型时的缺省对齐方式,当有嵌套复合成员时,
【2】改为:复合成员相对于结构体首地址偏移量是复合成员最宽基本类型大小的整数背
所以分析你上面的
typedef struct node
{
int a[100];
char b;
}kkk;
先是第一成员400个字节,然后还有个char一个字节,为了满足第第三条准则,即总大小401为最宽基本类型的整数背,明显401不是最宽基本类型int(4)的整数背,所以总大小为404
再分析一个
typedef struct node
{
int a;
char b;
char c;
char d;
char e;
}kkk;
先是第一成员4个字节,第2---5成员1个字节,总共8个字节,满足要求。
如果按照你的错误理解,那么这个结构体就是20个字节了,显然是错误的。
希望楼主能理解,呵呵
在缺省对齐下我先给你说下三条准则吧,
【1】结构体变量的首地址能够被其最宽基本类型成员的大小所整除
【2】结构体每个成员相对于结构体首地址的偏移量是成员大小的整数背
【3】结构体的总大小为结构体最宽基本类型成员大小的整数背
以上都是结构体中只有基本类型时的缺省对齐方式,当有嵌套复合成员时,
【2】改为:复合成员相对于结构体首地址偏移量是复合成员最宽基本类型大小的整数背
所以分析你上面的
typedef struct node
{
int a[100];
char b;
}kkk;
先是第一成员400个字节,然后还有个char一个字节,为了满足第第三条准则,即总大小401为最宽基本类型的整数背,明显401不是最宽基本类型int(4)的整数背,所以总大小为404
再分析一个
typedef struct node
{
int a;
char b;
char c;
char d;
char e;
}kkk;
先是第一成员4个字节,第2---5成员1个字节,总共8个字节,满足要求。
如果按照你的错误理解,那么这个结构体就是20个字节了,显然是错误的。
希望楼主能理解,呵呵
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询