| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 771 人关注过本帖
标题:已解决 结构体大小
只看楼主 加入收藏
saya
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2006-7-19
收藏
 问题点数:0 回复次数:3 
已解决 结构体大小

typedef unsigned char U8; /// 1 byte
typedef unsigned int U32; /// 4 byte
typedef unsigned short U16; /// 2 byte

typedef struct frame_head
{
U8 dest[6];
U8 src[6];
U16 protocol;
}frame_head_t; <1>

typedef struct frame_body
{
frame_head_t head;
U32 content1;
U32 content2;
}frame_body_t; <2>



上面两个标号的变量 字节长度是多少?我觉得是14和22 但是程序运行的结果是14和24
想请教为什么。谢谢

[此贴子已经被作者于2006-9-5 17:19:53编辑过]

搜索更多相关主题的帖子: 结构体 frame typedef head byte 
2006-09-05 16:42
aladdin
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2006-9-5
收藏
得分:0 
以下是引用saya在2006-9-5 16:42:25的发言:

typedef unsigned char U8; /// 1 byte
typedef unsigned int U32; /// 4 byte
typedef unsigned short U16; /// 2 byte

typedef struct frame_head
{
U8 dest[6];
U8 src[6];
U16 protocol;
}frame_head_t; <1>

typedef struct frame_body
{
frame_head_t head;
U32 content1;
U32 content2;
}frame_body_t; <2>



上面两个标号的变量 字节长度是多少?我觉得是14和22 但是程序运行的结果是14和24
想请教为什么。谢谢

sizeof(struct frame_head)真的是14么,应该是16,LZ不妨试试。
所以才会产生LZ疑虑22和24的问题。

sizeof的结果等于对象或者类型所占的内存字节数。所以在struct frame_body中定义了frame_head_t head,这里的head实际占的内存大小是16(根据字节对齐原则,应为2的幂)。

2006-09-05 17:27
saya
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2006-7-19
收藏
得分:0 
试过了 是14 你可以自己试一下 由于字节对齐 导致的第二个变量的长度为24
2006-09-05 18:09
aladdin
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2006-9-5
收藏
得分:0 
总结个规律把:
字节对齐的细节和编译器实现相关,但一般而言,满足三个准则:
1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;
2) 结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding);
3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节(trailing padding)。
2006-09-05 20:02
快速回复:已解决 结构体大小
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033862 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved