位域
C语言中为了节省空间的一种常见用法。用于变量存储空间的二进制“位”的分配。
比如:
struct Data{ //该结构体定义了一个结构体类型
int a:8; //结构体中包含三个整型变量,如果
int b:6; //没有使用“:”位域,则改结构体
int c:2; //占用6个字节空间。但使用了“:”
}; //则该结构体只占用两个字节的空间
//其中 a占用一个字节,b占6个二进制
//位,c占两个二进制位。
内存对齐
struct D
{
short c;
int a;
char b;
};
最大偏移量:结构体元素最多的字节
最大位int 4字节,
Short 2字节 放到 4字节的地址中 ,还剩2字节 不够放int
Int 大于2字节 放到 新的 4字节中 剩下0字节 不够放char
Char 1字节放到新的 4字节中
所以一共12字节
#pragma pack(8)
struct data
{
int dog;
double cat;
int cow;
} too;
printf("%d\n", sizeof(struct data));
#pragma pack(8)
代表该文件强制执行8位对齐,可以看出总共占用了24个内存(字节Byte)大小