您的位置:首页 > 其它

sizeof 使用规则及陷阱

2009-08-24 15:06 113 查看
struct S1
{
char c;
int i;
};
问sizeof(s1)等于多少?

聪明的你开始思考了,char占1个字节,int占4个字节,那么
加起来就应该是5。是这样吗你在你机器上试过了吗也许你是对的,但很可能你是错
的!VC6中按默认设置得到的结果为8。
Why为什么受伤的总是我
请不要沮丧,我们来好好琢磨一下sizeof的定义——sizeof的结果等于对象或者类型所
占的内存字节数,好吧,那就让我们来看看S1的内存分配情况:
S1 s1 = { 'a', 0xFFFFFFFF };
定义上面的变量后,加上断点,运行程序,观察s1所在的内存,你发现了什么
以我的VC6.0为例,s1的地址为0x0012FF78,其数据内容如下:
0012FF78: 61 CC CC CC FF FF FF FF
发现了什么怎么中间夹杂了3个字节的CC看看MSDN上的说明:
When applied to a structure type or variable, sizeof returns the actual size, which may include padding bytes inserted for alignment.
原来如此,这就是传说中的字节对齐啊!一个重要的话题出现了。
struct PDU_7{
unsigned char pdu_id;
unsigned char jack_id;
unsigned char gun_id;
int bullet;
int lenght;
};

struct PDU_7{
unsigned char pdu_id;
int lenght;
unsigned char jack_id;
unsigned char gun_id;
int bullet;
};

这两种定义方法一样吗?

切忌:使用sizeof 时一定要记住进行调试
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: