码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C++之修改结构体成员字节对齐(二百一十三)


    简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

    优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀

    人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

    更多原创,欢迎关注:Android系统攻城狮

    欢迎关注Android系统攻城狮

    1.前言

    本篇目的:理解C++之修改结构体成员字节对齐

    2.应用实例

    <1>.一般结构体自然对齐

    #include 
    
    typedef struct{
      char a;
      int b;
    } DATA;
    
    int main(void){
      printf("sizeof(DATA)=%ld\n",sizeof(DATA));
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    编译 : g++ test.cpp -o test
    运行:./test
    打印:
    sizeof(DATA)=8

    DATA结构体以int类型的4byte对齐,char本来占1个byte,后三个字节为填充字节。

    1byte1byte1byte1byte1byte
    a(char)1byte填充1byte填充1byte填充1byte
    b(int)1byte1byte1byte1byte

    以4byte对齐,1个char类型占4byte(后三个byte填充)和1个int类型占4byte,,一共8个byte,所以 sizeof(DATA)=6。

    <2>.使用-fpack-struct=2编译选项按照2byte对齐

    
    
    • 1

    编译 : g++ -fpack-struct=2 test.cpp -o test
    运行:./test
    打印:
    sizeof(DATA)=6

    DATA结构体以int类型的4byte对齐,char本来占1个byte,后三个字节为填充字节。

    1byte1byte1byte1byte1byte
    a(char)1byte填充1byte
    b(int)1byte1byte1byte1byte

    以2byte对齐,1个char类型占2byte(后一个byte填充)和1个int类型占4byte,一共6个byte,所以 sizeof(DATA)=6。

    <3>.使用-fpack-struct编译时,当不指定“n”时,将没有填充字节,所有成员将一个挨着一个排在一起。

    
    
    • 1

    编译 : g++ -fpack-struct test.cpp -o test
    运行:./test
    打印:
    sizeof(DATA)=5

    DATA结构体以int类型的4byte对齐,char本来占1个byte,后三个字节为填充字节。

    1byte1byte1byte1byte1byte
    a(char)1byte
    b(int)1byte1byte1byte1byte

    1个char类型占1byte和1个int类型占4byte,一共5个byte,中间没有填充字节,一个个挨在一起,所以 sizeof(DATA)=5。

  • 相关阅读:
    2024广东省职业技能大赛云计算赛项实战——构建CICD
    2023数维杯国际赛数学建模竞赛选题建议及B题思路讲解
    EfficientFormer:轻量化ViT Backbone
    Python爬虫进阶:使用Scrapy库进行数据提取和处理
    发现XWPFDocument写入Word文档时的小BUG:两天的探索与解决之旅
    将ppt里的视频导出来
    SourceInsight添加对汇编语言文件.s和.S的支持
    day008
    博弈论
    【Linux】进程间通信——进程间通信的介绍和分类、管道、匿名管道、命名管道、匿名管道与命名管道的区别
  • 原文地址:https://blog.csdn.net/u010164190/article/details/132892073
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号