首页 > 代码库 > 结构体声明与内存对齐
结构体声明与内存对齐
1、结构体的声明:
1)struct Student{
int stu_id;
char name[25]
int age;
char sex;
};
Student student1, student2;
2)struct Student{
int stu_id;
char name[25]
int age;
char sex;
}student1,student2;
3)struct {
int stu_id;
char name[25]
int age;
char sex;
}student1,student2;
声明一个结构体只是一种结构体类型,它相当于一个模型,但其中并无具体数据,系统也不为之分配实际的内存单元,为了能在程序中使用结构体类型的数据,应当定义结构体类型的变量,并在其中存放具体的数据,即结构体本身不会被作为数据而开辟内存,真正作为数据而在内存中存储的是这种结构体所定义的变量。
2.结构体内存对齐:
不同编译器,内存会有所不同,在存储结构体时会按照内存对齐进行处理,本文只考虑win32下情况,下表是不同数据类型在内存中所占的大小。
char | short | int | float | long | double | long long | long double | |
长度 | 1 | 2 | 4 | 4 | 4 | 8 | 8 | 8 |
例1:没有挤占,int型所占空间最大,以int型对齐,即整体空间为4的位数。
struct Student{
int stu_id; //占4位
char name[25] ; //字符数组为25位,对齐应该补3位
int age; //占4位
char sex; //占1位,对齐应该补3位
};
实际占内存大小为:40。
例2:内部挤占,以int型空间对齐,即整体空间为4的位数。
struct Student{
int stu_id; //占4位
char name[25] ; //字符数组为25位,取4的倍数,因此为占28位
char sex; //向上挤占,因此占0位
int age; //占4位
};
实际占内存大小为:36。
例3:内部挤占,以double型空间对齐,即整体空间为8的位数。
struct Student{
int stu_id; //int为4位,补4位
char name[25] ; //字符数组为25位,补7位,占32位
char sex; //char为1位,向上挤占,因此占0位
double age; //占8位
};
实际占内存大小为:48。
结构体声明与内存对齐