读书人

问sizeof(A) = ?该如何解决

发布时间: 2012-02-07 17:45:37 作者: rapoo

问sizeof(A) = ?
给定结构struct A
{
char t:4;
char k:4;
unsigned short i:8;
unsigned long m;
};问sizeof(A) = ?

[解决办法]
sizeof(A) = 8
====
如果没有指定内存对齐,按照默认方式对齐的话,应该是8
其中
1) char t:4;
char k:4;
共同使用一个char,占据一个byte
2) unsigned short i:8;
本身占据2个btyes,但是由于要按照自身类型的大小的整数倍对齐,所以在unsigned short i:8之前,char t:4,char k:4之后会填入1 byte,到此共占用4bytes
3)unsigned long m;
由于前面占用了4bytes,m按照自身大小4 bytes存放时,不需要填充

该结构体类型变量,在big endian系统,内存中看起来应该是
------------------> 低bits到高bits方向
---------------------------
|t(4bits)|k(4bits)|padding(1 bytes) | i(1byte) |Unused(1 byte)|
---------------------------
| m 4bytes |
---------------------------

读书人网 >C语言

热点推荐