基础知识之 结构体内存对齐,联合体,枚举,大小端

发布时间:2026/7/22 13:55:37

基础知识之 结构体内存对齐,联合体,枚举,大小端 文章目录结构体内存对齐联合体枚举大小端结构体结构体是一个类型每个结构体都独一无二内存对齐内存对齐增加CPU读取的效率一次性读完整的数据避免多次访问用空间换时间因为CPU不是按字节读取内存的是按照字32位一次性读4字节64位一次读8字节对齐值min系统默认对齐数成员自身大小结构体最大对齐数结构体内成员对齐值最大值成员偏移量必须是该成员的对齐值整数倍#pragma pack()可以降低系统默认对齐数的上限但是无法提高正确的摆放可以节省空间大成员放前面structS2{intb;// 4字节偏移0shortc;// 2字节对齐2偏移4chara;// 1字节对齐1偏移6};// 总大小0-6对齐到4的倍数 → 8字节联合体联合体共用一块内存大小等于最大成员大小节省内存// 一个变量可能是int或float但不会同时用unionValue{intintVal;floatfloatVal;};structVariable{inttype;// 0int, 1floatValue val;// 共用内存};// 比分别存int和float节省4字节枚举定义一组常量枚举是让整数值有名字enumColor{RED0,// 默认0GREEN1,// 默认1BLUE20};//全局枚举变量intmain(){Color cRED;coutcendl;// 输出 0coutsizeof(Color)endl;// 输出 4int大小return0;}枚举底层是intc11可以自己指定// C11 指定底层类型enumclassStatus:uint8_t{// 只占1字节OK0,ERROR1,TIMEOUT2};coutsizeof(Status)endl;// 输出 1大小端大端低地址放高位数据小端低地址放低位数据如果电脑是大端或者直接取地址char*转换intmain(){intx1;char*p(char*)x;if(*p1){cout小端模式endl;}else{cout大端模式endl;}}

相关新闻