登陆

章鱼娱乐安卓下载安装-如安在嵌入式C言语中运用结构

admin 2019-07-18 233人围观 ,发现0个评论

本文将首要解说内存拜访粒度概念,以便能够了解处理器怎么拜访内存。然后,将进一步了解数据对齐的概念,并研讨一章鱼娱乐安卓下载安装-如安在嵌入式C言语中运用结构些示例结构的内存布局。在之前关于嵌入式C中结构的文章中,了解到重新排列结构中成员的次序能够改动存储结构所需的内存量。还将看到编译器在为结构成员分配内存时具有某些束缚。这些束缚被称为数据对齐要求,答应处理器以或许出现在存储器布局中的一些糟蹋空间(称为“填充”)为价章鱼娱乐安卓下载安装-如安在嵌入式C言语中运用结构值来更有用地拜访变量。计算机的内存体系或许比这儿介绍的要杂乱得多。本文的方针是评论在编写嵌入式体系时或许有用的一些根本概念。

内存拜访粒度

咱们一般将内存想象为单字节存储方位的调集,如图1所示。每个方位都有一个仅有的地址,答应咱们拜访该地址的数据。

图1


可是,处理器一般以大于一个字节的块办法拜访内存。例如,处理器能够以四字节块的办法拜访内存。在这种情况下,咱们能够想象图1中的12个接连字节,如下面的图2所示。

图2


你或许想知道这两种处理内存的办法之间有什么区别。运用图1,处理器一次读取一个字节并向内存写入。请注意,在读取内存方位或写入内存之前,咱们需求拜访该内存单元,而且每次内存拜访都需求一些时刻。假定咱们想要读取图1中存储器的前八个字节。关于每个字节,处理器需求拜访内存并读取它。因而,为了读取前八个字节的内容,处理器将有必要拜访内存八次。

在图2中,处理器一次读取4个字节并将其写入内存。因而,为了读取前四个字节,处理器拜访存储器的地址0并读取四个接连的存储方位(地址0到3)。相同,要读取下一个四字节块,处理器需求再次拜访内存。它转到地址4并一起从地址4到7读取存储方位。关于字节巨细的块,需求8次内存拜访来读取接连8个字节的内存。可是,运用图2,只需求两次内存拜访。如上所述,每次内存拜访都需求一些时刻。由于图2中所示的存储器装备减少了拜访次数,因而能够进步处理功率。处理器在拜访内存时运用的数据巨细称为内存拜访粒度。图2描绘了具有四字节存储器拜访粒度的章鱼娱乐安卓下载安装-如安在嵌入式C言语中运用结构体系。

内存拜访鸿沟

硬件规划人员常常选用另一种重要技能来进步处理体系的功率:它们约束处理器,使其只能在某些鸿沟拜访内存。例如,处理器或许仅能够在四字节鸿沟上拜访图2的内存,如图3中的赤色箭头所示。

图3


这种鸿沟约束会使体系明显进步功率吗?细心看看。假定咱们需求读取地址为3和4的内存方位的内容(由图3中的绿色和蓝色矩形表明)。假如处理器能够从恣意地址开端读取一个四字节的块,那么咱们能够拜访地址3并经过单个内存拜访读取两个所需的内存方位。可是,如上所述,处理器不能直接拜访恣意地址;相反,它只在某些鸿沟拜访内存。那么假如处理器只能拜访四字节鸿沟,它将怎么读取地址3和4的内容?

由于内存拜访鸿沟约束,处理器有必要拜访地址为0的内存方位并读取接连的四个字节(地址0到3)。接下来,它有必要运用移位操作将地址3的内容与其他三个字节(地址0到2)分隔。类似地,处理器能够拜访地址4并从地址4到7读取另一个四字节块。最终,能够运用移位操作将所需字节(蓝色矩形)与其他三个字节分隔。

假如没有内存拜访鸿沟约束,能够用一个内存拜访读取地址3和地址4。可是,鸿沟约束迫使处理器两次拜访存储器。那么,假如数据操作变得愈加困难,为什么需求约束对某些鸿沟的内存拜访呢?内存拜访鸿沟存在约束,由一仙难求于对地址进行某些假定能够简化硬件规划。例如,假定一个内存块中的一切字节都需求32位来寻址。假如将地址约束为四字节鸿沟,那么32位地址中的两个最低有用位将一直为零(由于地址一直能够被4整除)。因而,咱们能够运用30位来寻址一个232字节的内存。

数据对齐章鱼娱乐安卓下载安装-如安在嵌入式C言语中运用结构

已然现已知道根本处理器怎么拜访内存,那么下面就能够能够评论数据对齐要求。一般,任何K字节C数据类型有必要具有K的倍数的地址。例如,四字节数据类型只能存储在地址0,4,8,...中; 它不能存储在地址1,2,3,5 ...... 这些约束简化了处理器和内存体系之间的接口硬件的规划。

例如,考虑一个具有四字节内存拜访粒度的处理器,它只能以四字节鸿沟拜访内存。假定一个四字节变量存储在地址1,如图4所示(四个字节对应四种不同的色彩)。在这种情况下,咱们需求两次内存拜访和一些额定的作业来读取未对齐的四字节数据(“未对齐”指它被分红两个四字节块)。该进程如图所示。

图4

可是,假如将一个四字节变量存储在4的倍数的任何地址,只需求一个内存拜访来修正数据或读取数据。所以将K字节数据类型存储在K的倍数的地址能够进步体系的功率。因而,C言语“char” 变量(只需求一个字节)能够存储在任何字节地址,可是一个章鱼娱乐安卓下载安装-如安在嵌入式C言语中运用结构双字节变量有必要存储在偶数地址中。四字节类型有必要从可被4整除的地址开端,而且八字节数据类型有必要存储在可被8整除的地址。例如,假定在特定机器上,“short”变量需求两个字节,“int ”和“float” 类型占用四个字节,“long ”、“double”指针占用八个字节。这些数据类型中的每一种一般应具有K的倍数的地址,其间K由下表给出。


请注意,不同数据类型的巨细或许因编译器和计算机体系结构的不同而不同。sizeof()运算符是查找数据类型实践巨细的最佳办法。

关于结构的内存布局的内容请打开下面链接进行检查:https://www.eetoday.com/application/iot/87708.html

请关注微信公众号
微信二维码
不容错过
Powered By Z-BlogPHP