首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一文了解什么是字节对齐

一文了解什么是字节对齐

作者头像
小驰行动派
发布2025-07-14 09:58:13
发布2025-07-14 09:58:13
15700
代码可运行
举报
文章被收录于专栏:Android Camera开发Android Camera开发
运行总次数:0
代码可运行
1 什么是字节对齐?

字节对齐主要是针对结构体而言的,通常编译器会自动对其成员变量进行对齐,以提高数据存取的效率;

2 字节对齐的两种方式

默认对齐方式、指定对齐方式;

(1)默认对齐方式内存分配满足以下三个条件:

  • 结构体第一个成员的地址和结构体的首地址相同;
  • 结构体每个成员地址相对于结构体首地址的偏移量(offset)是该成员大小的整数倍,如果不是则编译器会在成员之间添加填充字节;
  • 结构体总的大小要是其成员中最大size的整数倍,如果不是编译器会在其末尾添加填充字节。

如char是1字节,short是2字节,int是4字节...

(2)指定对齐方式使用以下方式声明:

代码语言:javascript
代码运行次数:0
运行
复制
//注:通过#pragma pack(n)改变C编译器的字节对齐方式
#pragma pack(4) //安装4字节的对齐方式

指定对齐方式内存分配满足以下几个条件:

  • 结构体第一个成员的地址和结构体的首地址相同
  • 结构体每个成员的地址偏移需要满足:N大于等于该成员的大小,那么该成员的地址偏移需满足默认对齐方式(地址偏移是其成员大小的整数倍);N小于该成员的大小,那么该成员的地址偏移是N的整数倍。
  • 结构体总的大小需要时N的整数倍,如果不是需要在结构体的末尾进行填充。
  • 如果N大于结构体成员中最大成员的大小,则N不起作用,仍然按照默认方式对齐。

注:在使用#pragma pack设定对齐方式一定要是2的整数幂,也就是(1,2,4,8,16,…),不然不起作用的,仍然按照默认方式对齐。

例1:结构体使用字节对齐为1

代码语言:javascript
代码运行次数:0
运行
复制

// 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值

代码语言:javascript
代码运行次数:0
运行
复制
// 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

作者:飞羚

《小驰行动派的知识星球》

————————————————

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-07-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小驰行动派 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 什么是字节对齐?
  • 2 字节对齐的两种方式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档