一、sizeof使用
sizeof(a)返回数据a对应的字节(byte)数
二、#pragma pack()的使用
1、结构体的对齐系数
结构体存在对齐系数,即结构体中的数据间并不是无缝连接的,而是有一个对其系数作为最小存储单位的。一个数据实际使用的内存大小为 N*对齐系数,N是使得这一部分内存大于等于数据真实大小的最小空间。
如:对齐系数为4byte,char形数据实际占据了4byte空间而不是1byte
2、#pragma pack()
每个特定平台上的编译器都有自己的默认“对齐系数”(32位机一般为4,64位机一般为8)。但是我们可以通过预编译命令#pragma pack(k),k=1,2,4,8,16来改变这个系数,其中k就是需要指定的“对齐系数”。
例:32位系统下有如下代码
#pragma pack(1)
struct fun{
int i;
double d;
char c;
};
因为定义了对齐系数为1,则sizeof(fun)=4+8+1=13 byte
反之,如果不定义对齐系数,对齐系数默认为4,则sizeof(fun)=4+8+4=16byte
三、参考文献
在#pragma pack(4)和#pragma pack(8)的情况下,结构体的大小分别是