1.2内存位宽
1.2.1.内存的逻辑抽象图
提到内存,脑中要有一张逻辑图。这张图是一行行大小相等的格子,对于32位内存来说,一行就是4个字节。CPU要访问一个int型数据,则首先取地址,这里的地址指的是int型数据单元的首地址,即4字节中的首字节的地址,然后就可以读取到这4个字节空间中所保存的数据。
1.2.2.内存位宽
从硬件角度:硬件的内存实现本身就是有宽度的,也就是内存条本身就有8位、16位等。需要注意的是,内存芯片之间可以并联,通过并联后8位内存芯片可以做出来16位、32位的硬件内存。
从逻辑角度:内存位宽在逻辑上是任意的,甚至逻辑上内存的位宽可以是24位,但没必要。从逻辑角度,不管内存位宽多少,直接操作即可。但因为所有的逻辑操作都是要硬件实现,所以还是要尊重硬件内存位宽。
1.3 内存编址和寻址、内存对齐
1.3.1.内存编址
在程序运行中,CPU实际只认识内存地址,而不关心这个地址所代表的空间在哪里、怎么分布等这些实体问题,因为硬件设计保证了这个地址就一定能找到这个格子,所以内存单元的2个概念:地址和空间是内存单元的两个方面。
1.3.2.关键:内存编址是以字节为单位的
1.3.3.内存和数据类型的关系
数据类型是用来定义变量的,而这些变量需要在内存中存储和运算。所以数据类型必须和内存相匹配才能获得最好的性能。
在32位系统中,定义变量最好使用32位的int,因为这样效率高。原因是32的数据类型配合32位的内存是可以实现32位CPU最好的性能。当定义8位的char时,CPU访问内存的效率其实是不高的。在很多情况下,我们定义的8位char变量,编译器会帮我们分配32位内存来存储这个char变量,也就是说浪费了24位的内存,但是效率高。
1.3.4.内存对齐
内存的对齐访问不是逻辑问题,是硬件问题。从硬件角度来说,32位的内存它0、1、2、3四个单元本身逻辑上就有相关性,这4个字节组合起来当做一个int,硬件上就是合适的,效率就高。
嵌入式物联网的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而错失高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。在评论区私信“嵌入式”0元领取学习资源,让你的学习之路更加顺畅!记得点赞、关注、收藏、转发哦!