我们来了解一下内存的物理构造,一般内存的外形图片如图1。一个内存是由若干个黑色的内存颗粒构成的。每一个内存颗粒叫做一个chip。

银行内部架构体系 银行内部结构图_银行内部架构体系

图1.内存外形图

上面这个内存条有8个chip。每一个chip内部,是由8个bank组成的。其构造如下图:

银行内部架构体系 银行内部结构图_进制_02

图2.内存颗粒物理结构

 

在每个bank内部,就是电容的行列矩阵结构了。(注意,二维矩阵中的一个元素一般存储着8个bit,也就是说包含了8个小电容)。

银行内部架构体系 银行内部结构图_数据_03

图3.bank物理结构

 

 

看完上面的图我们知道了内存是使用海量的小电容按照8个一组的方式排列出来的。

在逻辑电路中,低电平表示0,高电平表示1。一般规定低电平为0~0.25V,高电平为3.5~5V。不管是电容形式或者磁盘形式(硬盘)或者其他形式的储存器,他们的最基本存储形式实际上都只能储存真或者假两种形式。

所以内存中一个最基本储存电容(比特BIT)可以存放C语言中的一个布尔型数据(真|假),8个比特排列起来就组成了一个字节byte,一个字节可以存储一个2的8次方的数也就是256

2进制表示为:00000000 - 11111111(也就是8种不同电平状态的电容组合起来)

2进制转为10进制就是:256, 转为16进制就是FF

内存作为1个存储数据的存在, 有1个很重要的特性, 就是内存里的数据能被cpu直接访问。

虽然CPU能直接访问内存,但是也不能一个bit一个bit的查找,因为这样查找的话数据量太大了,于是CPU就按照8个一组的方式去查找内存(也就是一个字节byte),实际上内存也是按照8个bit一组的方式摆放的。

操作系统会给每一个字节(byte)的数据设置一个内存地址,在32位操作系统上他是一个32位的2进制数,最大能表达4G的数据(2的32次方个字节)的位置,在64位操作系统上他是一个64位的2进制数,能表示17亿多个G的数据位置。

C语言中的指针也就是内存地址,所以在32为操作系统c的指针占4字节,64位操作系统上占8字节。

然后CPU通过直接寻址技术去查找相关内存。

注意:内存地址只是一种寻址逻辑,并没有实体。但是C语言的指针是把操作系统返回的寻址逻辑地址给实际保存了,所以指针会占内存,不要混淆了。

了解了这些我们再来看C语言的数据类型就很容易理解了。

银行内部架构体系 银行内部结构图_银行内部架构体系_04

ASCII码就是把内存中一个字节的数规定了一个映射表,比如110000(48)代表0,1100001(97)代表A等。其实就是一个约定俗成的映射表。

银行内部架构体系 银行内部结构图_银行内部架构体系_05

unicode码也是类似的一种映射表,因为电脑只能表示和读懂2进制的数据,人类就规定了一种映射表来映射到其他的数据。

 

方便自己记忆而做的笔记,如果有错误恳请指出,参看文章如下:

https://www.jianshu.com/p/bc8252f18ecf

https://www.jianshu.com/p/92226196fdcd