问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

什么是C语言结构体字节对齐,为什么要对齐

发布网友 发布时间:2022-04-25 05:15

我来回答

1个回答

热心网友 时间:2023-10-29 01:32

对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就是自然对齐的。

需要字节对齐的根本原因在于CPU访问数据的效率问题。假设上面整型变量的地址不是自然对齐,比如为0x00000002,则CPU如果取它的值的话需要访问两次内存,第一次取从0x00000002-0x00000003的一个short,第二次取从0x00000004-0x00000005的一个short然后组合得到所要的数据,如果变量在0x00000003地址上的话则要访问三次内存,第一次为char,第二次为short,第三次为char,然后组合得到整型数据。而如果变量在自然对齐位置上,则只要一次就可以取出数据。一些系统对对齐要求非常严格,比如sparc系统,如果取未对齐的数据会发生错误,举个例:

char ch[8];
char *p = &ch[1];
int i = *(int *)p;

运行时会报segment error,而在x86上就不会出现错误,只是效率下降。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
巴西龟最长活多久,家养!!! 养胃的药最好的是什么啊 婴儿积食发烧不愿吃药怎么办 板门穴位在哪个部位 手机设置放偷看的方法? 凝结水回收器生产厂家? 个人账户养老金预测公式:现有5万元,缴费20年,能领多少钱? 临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? c语言结构体对齐的问题。 一个局域网有255个IP地址,为什么却只有254个可用?剩下的一个不能用的是哪个?为什么不能用? 饿了吗、美团外卖为什么不可以货到付款 美团 饿了么 可以货到付款吗 饿了可以货到付款吗 饿了么代付怎么操作 饿了么可以货到付款吗 ip地址为何到了255就没了,这样一来会不会不够用 哪里可以了解OPPO Reno3系统语言切换方法? OPPO Reno3如何在线升级? OPPO Reno3怎么在线升级呢? OPPO Reno3系统语言切换方法有哪些呢? opporeno3手机系统内存快满了,正常么? opporeno3系统出厂Android版本是多少? 谁能告诉我OPPO Reno3系统语言切换方法? opporeno3怎么安装系统禁止安装的软件 OPPO Reno3采用的是不是安卓Q系统? opporeno3元气版手机系统哪个版本的系统可以访问Androⅰd~dαtα这个文件夹? OPPO Reno3在线升级如何操作呢? opporeno3pro什么时候能更新12 C语言 结构体对齐 结构体字节对齐原则 关于C语言中的结构体字节对齐 结构体对齐 结构体成员的字节对齐 刚开始学结构体,什么叫结构体成员对齐? C 语言结构体对齐问题 如何判断对方手机是真的关机了还是设置了呼叫转移? C语言结构体的边界对齐是怎么回事啊? C语言结构体怎么对齐?按最大字节对齐?struct pp{int a;float b; doubl C++ 关于结构体对齐 VC中的结构体对齐是怎么回事?能不能具体解释一下?谢谢…… 结构体嵌套联合体字节对齐问题 微信可以识别关机 C++ 结构体对齐方式转换? 求助关于C语言结构体对齐的问题 结构体内存对齐问题 关于结构体字节对齐 结构体的定义为什么要字节对齐 梦见男友跟别的女人暧昧?是为什么