一.默认数据对齐
内存对齐 提高访问效率
内存对齐规则:1.数据的起始地址必须是其自身大小的整数倍
2.结构体和对象的对齐值是其成员中占用内存最大的数据类型的大小
1.类中存在int/ cha
2.类中同时存在int 和char
3.类中有虚函数
如下图所示 增加虚函数并不会改变对象本身大小
4.64位机上内存分布
二.强制不内存对齐
场景:TCP/IP中传输比特
使用#pragma pack(1)
三.代码测试
#include <stdio.h>
class person
{
public:
int age;
char sex;
char* point;
short height;
};
int main()
{
int a = 5;
char pon;
person chen;
chen.age = 5;
chen.sex = 1;
chen.height = 185;
chen.point = &pon;
printf("&pon:%p \n", &pon);
printf("&chen:%p \n", &chen);
printf("&chen.age: %p\n", &chen.age);
printf("&chen.sex: %p\n", &chen.sex);
printf("&chen.point: %p\n", &chen.point);
printf("&chen.height: %p\n", &chen.height);
return 0;
}
结果分析
int age 变量与chen 类对象起始相同 占用四个字节;
char sex 占用4个字节 因为默认的内存占用;
point 占用8个字节;