结构体类型对齐问题----例题及方法详细解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 结构体类型对齐问题----例题及方法详细解析
#include<stdio.h>
//struct A
//{
//    int a;
//    short b;
//    int c;
//    char d;
//};
//struct B
//{
//    int a;
//    short b;
//    char c;
//    int d;
//};
//int main()
//{
//    struct A sa = { 0 };
//    struct B sb = { 0 };
//    printf("%d\n", sizeof(sa));//16=4+2+2+4+1+3
//    printf("%d\n", sizeof(sb));//12=4+2+1+1+4
//}
/*#pragma pack(4)*///编译选项,按照四个字节对齐
//从第二个变量开始,看开始位置的下标是否是第二个元素变量类型的整数倍,是的话,就放,不是的话
//浪费到最大对齐数的整数倍再放,第三个变量,看开始位置的下标是否是第二个元素变量类型的整数倍
//是的话,就放,不是的话,浪费到最大对齐数的整数倍再放...
//所占字节数是不是最大对齐数的整数倍呢?是的话就是所占字节,不是的话就浪费到最大对齐数
//的整数倍为止
//如
//int main()
//{
//    struct A
//    {
//        short a;//下标为0开始放                                      放0-1
//        char d;//下标为2,是1的整数倍 ,不用浪费,下标为2开始放      放2
//        long b;//下标为3,不是4的整数倍,浪费到4,下标为4开始放      放4-7
//        long c;//下标为8,是4的整数倍,不用浪费,下标为8开始放       放8-11
//               //下标为11,总共是12字节,是最大整数4的整数倍,不用浪费  放12
//    };
//    struct B
//    {
//        long b;//下标为0开始放                                        放0-3
//        short c;//下标为4,是2的整数倍,不用浪费,下标为4开始放        放4-5
//        char d;//下标为6,是1的整数倍,不用浪费,下标为6开始放        放6
//        long a;//下标为7,不是4的整数倍,浪费到8,下标为8开始放,      放8-11
//               //下标为11,总共是12字节,是最大整数4的整数倍,不用浪费   放12
//    };
//    struct C
//    {
//        short c;//下标为0                                             放0-1
//        long b;//下标为2,不是4的整数倍,需要浪费,下标为4开始放      放4-7
//        char d;//下标为7,是1的整数倍,不需要浪费,下标为7开始放      放8
//        long a;//下标为9,不是4的整数倍,需要浪费,下标为12开始放     放12-15
//               //下标为11,总共是12字节,是最大整数4的整数倍,不用浪费   放16
//    };
//    struct A stA;
//    struct B stB;
//    struct C stC;
//    printf("%d %d %d", sizeof(stA), sizeof(stB), sizeof(stC) );//12 12 16-----
//    //看下标,下标满足下一个变量类型的整数倍才可以放
//    //str A中2+1(1是任何数的整数倍,不用浪费)+2(此时下标为2,需要浪费到4的整数倍,下标为4
//    // 处开始放)+4(int型)+4(int型)=12(是最大对齐数4的整数倍,不用浪费)
//    //str B中4+1(此时下标为3,short型需要是2的整数倍,浪费到下标为4)+1(1是任何数的整数倍,
//    //不用浪费)+(此时下标为5,long型需要是4的整数倍,浪费到下标为8)+3(此时为9个字节,不是最
//    //大对齐数4的整数倍,需要浪费到12)
//    return 0;
//}


相关文章
|
2月前
|
人工智能
歌词结构的巧妙安排:写歌词的方法与技巧解析,妙笔生词AI智能写歌词软件
歌词创作是一门艺术,关键在于巧妙的结构安排。开头需迅速吸引听众,主体部分要坚实且富有逻辑,结尾则应留下深刻印象。《妙笔生词智能写歌词软件》提供多种 AI 功能,帮助创作者找到灵感,优化歌词结构,写出打动人心的作品。
|
2月前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
45 3
|
2月前
|
开发框架 供应链 监控
并行开发模型详解:类型、步骤及其应用解析
在现代研发环境中,企业需要在有限时间内推出高质量的产品,以满足客户不断变化的需求。传统的线性开发模式往往拖慢进度,导致资源浪费和延迟交付。并行开发模型通过允许多个开发阶段同时进行,极大提高了产品开发的效率和响应能力。本文将深入解析并行开发模型,涵盖其类型、步骤及如何通过辅助工具优化团队协作和管理工作流。
61 3
|
2月前
|
人工智能
写歌词的技巧和方法全解析:开启你的音乐创作之旅,妙笔生词智能写歌词软件
怀揣音乐梦想,渴望用歌词抒发情感?掌握关键技巧,你也能踏上创作之旅。灵感来自生活点滴,主题明确,语言简洁,韵律和谐。借助“妙笔生词智能写歌词软件”,AI辅助创作,轻松写出动人歌词,实现音乐梦想。
|
28天前
|
缓存 监控 网络协议
一文带你了解10大DNS攻击类型,收藏!
【10月更文挑战第23天】
179 1
一文带你了解10大DNS攻击类型,收藏!
|
17天前
|
JSON PHP 数据格式
PHP解析配置文件的常用方法
INI文件是最常见的配置文件格式之一。
|
24天前
|
机器学习/深度学习 人工智能 安全
TPAMI:安全强化学习方法、理论与应用综述,慕工大、同济、伯克利等深度解析
【10月更文挑战第27天】强化学习(RL)在实际应用中展现出巨大潜力,但其安全性问题日益凸显。为此,安全强化学习(SRL)应运而生。近日,来自慕尼黑工业大学、同济大学和加州大学伯克利分校的研究人员在《IEEE模式分析与机器智能汇刊》上发表了一篇综述论文,系统介绍了SRL的方法、理论和应用。SRL主要面临安全性定义模糊、探索与利用平衡以及鲁棒性与可靠性等挑战。研究人员提出了基于约束、基于风险和基于监督学习等多种方法来应对这些挑战。
49 2
|
28天前
|
存储 消息中间件 NoSQL
Redis数据结构:List类型全面解析
Redis数据结构——List类型全面解析:存储多个有序的字符串,列表中每个字符串成为元素 Eelement,最多可以存储 2^32-1 个元素。可对列表两端插入(push)和弹出(pop)、获取指定范围的元素列表等,常见命令。 底层数据结构:3.2版本之前,底层采用**压缩链表ZipList**和**双向链表LinkedList**;3.2版本之后,底层数据结构为**快速链表QuickList** 列表是一种比较灵活的数据结构,可以充当栈、队列、阻塞队列,在实际开发中有很多应用场景。
|
26天前
|
Dart 安全 编译器
Flutter结合鸿蒙next 中数据类型转换的高级用法:dynamic 类型与其他类型的转换解析
在 Flutter 开发中,`dynamic` 类型提供了灵活性,但也带来了类型安全性问题。本文深入探讨 `dynamic` 类型及其与其他类型的转换,介绍如何使用 `as` 关键字、`is` 操作符和 `whereType&lt;T&gt;()` 方法进行类型转换,并提供最佳实践,包括避免过度使用 `dynamic`、使用 Null Safety 和异常处理,帮助开发者提高代码的可读性和可维护性。
74 1
|
2月前
|
安全 Java
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
19 1

推荐镜像

更多
下一篇
无影云桌面