C语言的字节对齐
来源:互联网 发布:吾知的小说 编辑:程序博客网 时间:2024/05/21 11:02
目录
- 目录
- C语言的字节对齐
- 结构体和联合体的大小
- pragma pack
C语言的字节对齐
结构体和联合体的大小
在C编译器缺省情况下的字节对齐方式
默认int类型成员的对齐长度为4字节,char为1字节,float为4字节,double类型为8字节对齐
结构体的总大小为结构体最宽字节基本类型成员大小的整数倍,如果有需要,编译器会在最末一个成员之后加上一些填充字节
原则上,共用体的大小取决于占据最多内存的成员的长度。共用体的长度一定可以被最小数据类型整除,也必须至少包含最大成员数据
/** C/C++ 语言** @author Erice_s* @date 2017/10/20**/#include <iostream>using namespace std;union{ char name[62]; // 62 int age; //4 double num; //8} a,b,c;//匿名联合体,只能用a b c 来引用 union m{ double b; //8 char str[9]; //9};int main(void){ int size = sizeof(a);//64 成员最大为62 但是要整除 1 4 8 ==》 64 printf("sizeof(a)=%d\n",size); size = sizeof(m); //16 成员最大为9 但是要整除 8 ==》 16 printf("sizeof(a)=%d\n", size); return 0;}
运行结果
/** C/C++ 语言** @author Erice_s* @date 2017/10/20**/#include <iostream>using namespace std;struct{ char name[62]; // 62 int age; //4 double num; //8} a,b,c;struct m{ double b; //8 char str[9]; //9};int main(void){ printf("sizeof(a)=%d\n", sizeof(a)); //74 要求能够整除最宽基本类型的成员 double 8 ==》 80 printf("sizeof(m)=%d\n", sizeof(m)); // 8+9=17 同时要能整除8 即最后长度 ==》 24 return 0;}
运行结果
#pragma pack
#pragma pack(n)用来指定C编译器编译选项为n字节对齐
#pragma pack()取消自定义字节对齐方式
关于对齐,每个数据成员自身都大小x;并且指定对齐宽带为y,那么该数据的实际对齐大小N=min(x,y),该数据成员的起始地址必须是N的倍数,总长度必须是指定对齐宽度y的倍数。
#pragma pack(2)struct s{ char c; //char为1个字节 N=min(x,y)=min(1,2)=1 内存空间0-0; int i; //int 为4个字节 N=min(x,y)=min(4,2)=2 本应该为1-4 但是要求“数据成员的起始地址必须是N的倍数” 所以内存空间2-5 };//占用字节10 1111 ==》6个字节#pragma pack();
此时sizeof(s)=6
#pragma pack(8)struct B{ short c; //short为2个字节 内存空间0-1; int i; //int 为4个字节 本应该为2-5 N=min(x,y=min(4,8)=4 但是要求“数据成员的起始地址必须是N的倍数” 所以内存空间4-7 //2-3空间补0 };//占用字节1100 1111 ==》8个字节#pragma pack();
此时sizeof(B)=8
阅读全文
0 0
- C语言的字节对齐
- C语言的字节对齐
- C语言的字节对齐
- C语言的字节对齐
- C语言的字节对齐
- C语言字节对齐
- C语言字节对齐
- c语言字节对齐
- C语言字节对齐
- C语言字节对齐
- C语言字节对齐
- C语言字节对齐
- C语言字节对齐
- C语言字节对齐
- C语言字节对齐
- C语言字节对齐
- C语言字节对齐
- C语言字节对齐
- Stm32cubeMX生成配置工程的例子和过程记录
- 随记接口跟抽象类
- MySql入门(1)
- Python3pandas库transform用法
- Sicily 1155. Can I Post the letter
- C语言的字节对齐
- Centos 添加静态路由及 SIOCADDRT错误处理
- Cobbler自动批量部署不同需求的系统
- 轻松掌握正则表达式(1)
- TCP/IP协议三次握手与四次握手流程解析
- CSDN如何转载别人的文章
- Spring AOP动态代理例子
- 股票量化分析(10)——第一个策略(rsi强度策略)
- 猜字游戏