1-2位、字节、半字、字的概念和内存位宽

本文介绍了内存从硬件和逻辑两个角度的理解,包括内存的类型如SRAM和DRAM,内存逻辑抽象成无限大的存储空间,每个内存单元都有固定地址。此外,还讨论了内存单位(位、字节、半字、字)以及内存位宽,强调了硬件和逻辑位宽的区别。在编程中,内存是存放变量的基础,并受到实际硬件限制。在Linux+ARM平台上,字通常为32位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.2.1什么是内存?(硬件和逻辑两个角度)

从硬件角度:内存实际上是电脑的一个配件(一般叫内存条)。根据不同的硬件实现原理还可以把内存分成SRAM和DRAM(DRAM又有好多代,譬如最早的SDRAM,后来的DDR1、DDR2、…、LPDDR)
从逻辑角度:内存是这样一种东西:它可以随机访问(随机访问的意思是只要给一个地址,就可以访问这个内存地址)、并且可以读写(当然了逻辑上也可以限制其为只读或者只写);内存在编程中天然是用来存放变量的(就是因为有了内存,所以C语言才能定义变量,C语言中的一个变量实际就对应内存中的一个单元)。

1.2.2 内存的逻辑抽象图(内存的编程模型)

从逻辑角度来讲,内存实际上是一个由无限多个内存单元格组成的,每个单元格有一个固定的地址叫内存地址,这个内存地址和这个内存单元格唯一对应且永久绑定。
以大楼来类比内存是最合适的。逻辑上的内存就好像是一栋无限大的大楼,内存的单元格就好像大楼中的一个个小房间。每个内存单元格的地址就好像每个小房间的房间号。内存中存储的内容就好像住在房间中的人一样。
在这里插入图片描述
逻辑上来说,内存可以有无限大(因为数学上编号永远可以增加,无尽头)。但是现实中实际的内存大小是有限的,譬如32位系统(32位系统指的是32位数据线,但是一般地址线也是32位,这个地址线32位决定了内存地址只能有32位二进制,所以逻辑上的大小为2的32次方)内存限制就为4G,实际上32位的系统中可用的内存是小于等于4G的(譬如32位CPU装32位windows,但实际电脑只有512M内存)。

1.2.3 位和字节

内存单元的大小单位有4个:位(1bit)、字节(8bit)、半字(一般是16bit)、字(一般是32bit)在所有的计算机、所有的机器中(不管是32位系统还是16位系统还是以后的64位系统),位永远都是1bit,字节永远都是8bit。

1.2.4 字和半字

历史上曾经出现过16位系统、32位系统、64位系统三种,而且操作系统有windows、Linux、IOS等很多,所以很多的概念在历史上曾经被混乱的定义过。
建议大家对字、半字、双字这些概念不要详细区分,只要知道这些单位具体有多少位是依赖于平台的。实际工作中在每种平台上先去搞清楚这个平台的定义(字是多少位,半字永远是字的一半,双字永远是字的2倍大小)
编程时一般根本用不到字这个概念,那我们区分这个概念主要是因为有些文档中会用到这些概念,如果不加区分可能会造成你对程序的误解。
在Linux + ARM这个软硬件平台上(我们嵌入式核心课的所有课程中),字是32位的。

1.2.5 内存位宽(硬件和逻辑两个角度)

从硬件角度讲:内存硬件的实现本身是有宽度的,也就是说有些内存条是8位的,而有些是16位的。那么需要强调的是内存芯片之间是可以并联的,通过并联后即使8位的内存芯片也可以做出来16位或32位的硬件内存。
从逻辑角度讲:内存位宽在逻辑上是任意的,甚至逻辑上存在内存位宽是24位的内存(但是实际上这种硬件是买不到的,也没有实际意义)。从逻辑角度来讲不管内存位宽是多少,我就直接操作接口,对我的操作不构成影响。但是因为你的操作不是纯逻辑而是需要硬件去执行的,所以不能为所欲为,所以我们实际的很多操作都是受限于硬件的特性。譬如24位的内存逻辑上和32位的内存没有区别,但实际硬件都是32位的,都要按照32位硬件的特性和限制来干活。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非主流的豆瓣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值