C语言 字节对齐

C语言 字节对齐结构体变量的首地址能够被其最宽基本类型成员的大小所整除 结构体每个成员相对结构体首地址的偏移量 offset 都是成员大小的整数倍 如有需要编译器会在成员之间加上填充字节 结构体的总大小为结构体最宽基本类型成员大小的整数倍 如有需要编译器会在最末一个成员之后加上填充字节 include stdio h 按结构体最宽数据类型 int 对齐 char 多少都是按 4 字节对齐 structstChar chara 5 intb stdio h

字节对齐 、pragma 、位域长度问题整理

  1. 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;
  2. 结构体每个成员相对结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节;
  3. 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节。
#include <stdio.h> // 按结构体最宽数据类型int对齐 // char[*]多少都是按4字节对齐 struct stChar{ 
    char a[5]; int b; char c; }; // 按结构体最宽数据类型short对齐 struct stShort{ 
    char a; short b; }; // 按结构体最宽数据类型long对齐 struct stLong{ 
    char a; long b; }; // 按结构体最宽数据类型int对齐 // 变量c的偏移量 要为自己大小的倍数 #pragma pack(8) //为2时,sizeof为10.为8时sizeof为12  struct AA { 
    int a; char b; short c; //长度2 偏移量要提升到2的倍数6;存放位置区间[6,7] char d; }; struct AAA { 
    // 类型说明符 位域名: 位域长度 int a:2; //变量a,4位长度,只使用两位长度 sizeof(AAA)为4 char b:1; }; int main() { 
    struct stChar stChar1; struct stShort stShort1; struct stLong stLong1; struct AA stAA; struct AAA stAAA; printf("stChar = [%ld]\n", sizeof(stChar1)); printf("stShort = [%ld]\n", sizeof(stShort1)); printf("stLong = [%ld]\n", sizeof(stLong1)); printf("stAA = [%ld]\n", sizeof(stAA)); printf("stAAA = [%ld]\n", sizeof(stAAA)); return 0} 

打印结果

stChar = [16] stShort = [4] stLong = [16] stAA = [12] stAAA = [4] 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231070.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • discuz 二次开发[通俗易懂]

    discuz 二次开发[通俗易懂]转载地址:http://www.cnblogs.com/LY-leo/p/5843439.htmldiscuz框架也算是比较流行的社区论坛框架,discuz的基础架构采用世界上最流行的web编程组合PHP +MySQL 实现,是一个经过完善设计,适用于各种服务器环境的高效论坛系统解决方案。1、安装discuz先下载 discuz的安装包,解压之后有3个文件,如下:

    2022年5月20日
    128
  • 长尾分布和重尾分布「建议收藏」

    长尾分布和重尾分布「建议收藏」文章来源:长尾分布,重尾分布(Heavy-tailedDistribution)-Shiyu_Huang-博客园https://www.cnblogs.com/huangshiyu13/p/6217180.html长尾分布,重尾分布(Heavy-tailedDistribution)Zipf分布:Zipf分布是一种符合长尾的分布:  就是指尾巴很长的分布。那么尾巴很长很厚的分布有什么特…

    2025年5月29日
    2
  • 目前国内最快最稳定的DNS

    目前国内最快最稳定的DNS目前最快的DNS闲着没事做,给大家找了一下国内目前最快的DNS(我说是最快的,不是最稳定的,不保证DNS劫持);废话不多说,直接直接上图;最上面的是最快的,一次往下排;测试地点:上海浦东测试时间:2021年09月14使用工具:DNSBenchmark工具使用方法:工具使用方法:(我也是找地方copy的:https://www.52help.net/smarthome/300.html)DNSBenchmark安装使用详细步骤及教程1.先安装DNSBenchmark,可

    2022年5月2日
    148
  • vue-router 详解

    vue-router 详解文章目录1、认识vue-router2、安装和使用vue-router1、认识vue-router目前前端流行的三大框架,都有自己的路由实现:Angular的ngRouterReact的ReactRouterVue的vue-routervue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用。我们可以访问其官方网站对其进行学习:https://router.vuejs.org/zh/vue-router是基于路由和组件的路由用户设定访问

    2022年7月11日
    25
  • 2022clion激活码最新【2022免费激活】

    (2022clion激活码最新)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~FZP9ED60OK-eyJsaWNlbnNlSWQiOi…

    2022年4月1日
    359
  • Java学习之面向对象篇

    Java学习之面向对象篇0X00前言前面讲了java的一些基本语法,这里就来讲讲java的核心思想,面向对象。0X01面向对象概念Java语言是一种面向对象的程序设计语言,而面向对象思想是

    2021年12月11日
    72

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号