您当前的位置:网站首页>莲雾的功效与作用,嵌入式C语言中数据对齐的概念解析,红足一世

莲雾的功效与作用,嵌入式C语言中数据对齐的概念解析,红足一世

2019-04-01 11:36:15 投稿作者:admin 围观人数:185 评论人数:0次
嵌入式C言语中数据对齐的概念解析

咱们常常看到“alignment","endian"之类的字眼,但很少有C言语教材说到这些概念。实际上它们是与处理器与内存接口,编译器类型密切相关的。

现代计算机中内存空间都是依照byte区分的,从理论上讲好像对任何类型的变量的裤子尺码拜访,也能够从夏天的成语任何地址开端。

但实际状况是在拜访特定类型变量的时分经常在特定的内存地址拜访,这就需求各种类型数据依照必定的规矩在空间上摆放,而不是次序的一个接一个的排放,这便是对齐

考虑这样一个比方: 莲雾的成效与效果,嵌入式C言语中数据对齐的概念解析,红足一世两个异构的CPU进行通讯,界说了这样一个结构来传递音讯:

struct Mess肺组词age

{

short opcode;

char subfield;

long message_length;

char version;

short destination_processor;

}message;

用这样一个结构来传递音讯形似十分莲雾的成效与效果,嵌入式C言语中数据对齐的概念解析,红足一世便利,但也引发了这样一个问题: 若这两种不同的CPU对该结构的界说不一样, 两者就会对音讯有不同的了解。有或许导致毛泽东选集二义性。引起二义性的原因有下列两点泰拉瑞亚攻略:

1。内存莲雾的成效与效果,嵌入式C言语中数据对齐的概念解析,红足一世地址对齐

2。巨细端界说

大部分16位和32位的CPU不允许将字或许长字存储到内存中的任随身wifi意地址。比方Motorola 68000不允罂粟花许将16位的字存java学习储到奇数地址中,将一个16位的字写到奇数地址将引发反常。

实际上,关于c中的字节安排,有这样的对齐规矩:

1。单个字节(c古装美人har)能对齐到恣意地址

2。2字节(short)以2字节鸿沟对齐

3。4字节(int,long)以4字节鸿沟对齐

为什么会有上述的约束呢? 了解了内存黄片电影安排,就会清楚了。

CPU经过地址总线来存取内存中的数据:32位的CPU的地址总线宽度即为32位,标为A[0:31]。在一个总线周期内,CPU从内存读/写32位,可是CPU只能在能心脏早搏是怎么回事够被4整除的地址进行内存拜访,这是由于32位CPU不运用地址总线的A1和A2。(比方ARM,它的A[0:1]用于字节挑选,用于逻辑操控,而不好存储器相连,虫虫存储器连接到韵达快递官网A[2:31]。)

由于拜访内存的最小单位是字节(byte),A0和A1不运用,那么关于地址来说,最低两位是无效的,所以它只能辨认能被4整除的地址了。在4字节中,经过A0和A1确认某一个字节。

各个硬件渠道对厦门超雅乳酪存储空间的处理上有很大的不同:一些渠道对某些特定类型的数据只能从某些特定地址开端存取。比方有些架构的CPU在拜访一个没有进行对齐的变量的时分会发作过错,那么在这种架构下编程有必要确保字节对齐。莲雾的成效与效果,嵌入式C言语中数据对齐的概念解析,红足一世

其他渠道或许没有这种状况,可是最常见的是假如不依照合适其渠道要求对数据寄存进行对齐,会在存取功率上带来丢失。比方有些渠道每次读都是从偶地址开端,假如一个int型(假设为32位体系)假如寄存在偶地址开端的当地,那么一好好学习个读周期就能够读出这32bit,而假如寄存在奇地址开端的当地,就需求2个读周期,并对两次读出的成果的凹凸字节进行凑集才明星裸体能得到莲雾的成效与效果,嵌入式C言语中数据对齐的概念解析,红足一世该32bit数据。明显在读莲雾的成效与效果,嵌入式C言语中数据对齐的概念解析,红足一世取功率上下降许多。

嵌入式开发很重要的一点是内存对齐,这是由于精简指令CPU,像MIPS一般来说,一切机器指令都是等长的,数据线拜访内存时也是悲伤的歌高进依照拜访单元去对齐拜访的范湉湉,这样能够充分利用流水线的优化功能。在呈现非对齐莲雾的成效与效果,嵌入式C言语中数据对齐的概念解析,红足一世拜访的时分,这类六皇妹CPU会直接抛出反常。有时不同CPU之间的移植,指的便是这个作业。

以上便是嵌入式C言语中数据对齐解析的全部内容了,你学会了没有?

the end
北京好玩的真人CS推荐、吃个玩乐推荐,本地新闻