字节对齐主要是针对结构体而言的,通常编译器会自动对其成员变量进行对齐,以提高数据存取的效率;
默认对齐方式、指定对齐方式;
(1)默认对齐方式内存分配满足以下三个条件:
如char是1字节,short是2字节,int是4字节...
(2)指定对齐方式使用以下方式声明:
//注:通过#pragma pack(n)改变C编译器的字节对齐方式
#pragma pack(4) //安装4字节的对齐方式
指定对齐方式内存分配满足以下几个条件:
注:在使用#pragma pack设定对齐方式一定要是2的整数幂,也就是(1,2,4,8,16,…),不然不起作用的,仍然按照默认方式对齐。
例1:结构体使用字节对齐为1
// date:2022年 11月 08日 星期二 19:35:36 CST
// author: HeiBaiYe
// path: /mnt/hgfs/CD2206/02-c语言
#include<stdio.h>
#pragma pack(1) //通过#pragma pack(n)改变C编译器的字节对齐方式 在C语言中,结构是一种复合数据类型
structs1{
char ch; // 1
int a; //4
double b; //8
char c1; //1
};
#pragma pack(1)
structs2{
char ch; //1
int a; //4
double b; //8
};
intmain()
{
printf("s1的大小:%ld\n ",sizeof(struct s1));
printf("s2的大小:%ld\n ",sizeof(struct s2));
return0;
}
结果: s1的大小:14 s2的大小:13
例2:结构体使用默认字节对齐方式,m值
// date:2022年 11月 08日 星期二 19:35:36 CST
// author: HeiBaiYe
// path: /mnt/hgfs/CD2206/02-c语言
#include<stdio.h>
structs1{
char ch; // 1
int a; //4
double b; //8
char c1; //1
};
structs2{
char ch; //1
int a; //4
double b; //8
};
intmain()
{
printf("s1的大小:%ld\n ",sizeof(struct s1));
printf("s2的大小:%ld\n ",sizeof(struct s2));
return0;
}
结果: s1的大小:24 s1的大小:16
参考文章:https://blog.csdn.net/wdl20170204/article/details/109386825
作者:飞羚
《小驰行动派的知识星球》
————————————————