内存那点事儿
内存那点事儿
DDR3?DDR4?
这个大家熟悉吧,我们要是换内存条的话一定要看看我们的电脑支持是哪一种,不然就是白花钱啊,我之前就买错过一次,源于自己的太自信~
我们已经知道了啥是内存,也知道了我们这里的内存也是主存,RAM,它们都是一个品种,一样的,这个RAM是一般的随机存取存储器,除此之外还有DRAM,这又是啥嘞,RAM是随机存取存储器,这个DRAM是动态随机存取存储器,对应的还有SRAM叫做静态存取存储器。
DRAM结构简单,单位体积内容量高成本低,但是访问速度慢,耗电大,相应的SRAM结构复杂,成本高等。无论DRAM还是SRAM都属于内存,也就是断电会丢失数据,综合来说DRAM的性价比比较高,扩展性也很好,所以就成了现在广为流行的电脑主存,
然后你还要知道SDRAM,这是啥嘞,DRAM是动态随机存取存储器,SDRAM是同步动态随机存取存储器,也就是比DRAM更牛,升级版,然后还有DDR SDRAM,不用说,这肯定是SDRAM的升级版,这个叫双倍数据率同步动态随机存取存储器,哈哈,这名字可以的,继续,还有DDR3 SDRAM,知道这个是啥不,对的,第三代双倍数据率同步动态随机存取存储器,哈哈,还有DDR4 SDRAM,知道了吧,那么我们电脑中的DDR3和DDR4知道怎么回事了吧。
内存的原本模样(物理机制)
我们之前已经说过了内存就是主存,也叫做随机存取存储器,缩写是RAM,然后还说了什么DRAM,SRAM然后还有DDR SDRAM等等,这些其实都是内存,只不过是各自的形式不同,但是实实在在的一个电路板,就我们能拿在手里的内存条,他们的物理机制其实都差不多,都有什么电源,地址信号,数据信号和控制信号等等,下面我们来看一张图你就清楚了
啥是内存IC
这个内存IC其实就是内存中用来真正保存数据的地方,也就是内存提供的容量所在,因此,可以说内存的实质就是内存IC,先知道这些,我们继续往下说,这个内存IC后面还会说的。
刚开始看这个图一定是懵的,那么我们先来看一个问题,就是这个图代表的内存能够存储多少数据呢?接下来我们就以这个图开始说,最后如果你能明白这个内存能存储多少数据,目的就达到了。
上图的各个标志已经有说明了,VCC和GND是链接电源的地方,通上电之后这玩意就带电了,我们之前应该知道,数据都是以二进制的形式存放在内存中的,也就是0和1,这个是通识,那么这个0和1是怎么表示的呢?
看这个图,当VCC和GND通上电以后,就可以给其他引脚传递1或者0的信号,这里的引脚就是A0-A9,这是地址信号引脚,D0-D7这是数据信号引脚,1或者0是根据电压来表示的。
通常嘞,+5V的直流电压表示1,0V就是0,也就是说啊,通上电以后嘞,这里的数据信号引脚D0-D7这八个引脚可能是+5V或者是0V,也就是可以表示0或者1,一个引脚相当于一位,这位上可以是0或者1,然后这八个引脚都可以表示对应的0或者1,这样就可以形成一个八位的用0和1表示的数据,这其实就是二进制啊。
D0-D7可以表示具体的数据,这也是存放在内存中的数据的底层表现形式,同样的,上面的地址信号引脚也是一样的道理,每个引脚可以表示1或者0,这样地址信号引脚和数据信号引脚确定以后,地址信号引脚组成的0和1的这个数据就叫做我们熟知的内存地址,根据它我们就可以找到数据信号引脚代表的数据了。
上面说的可能有点小难懂,不理解的多读几遍,对照着图哦
内存IC的容量怎么看
那么这个内存可以存储多少个数据嘞,我们知道数据信号引脚来表示具体的数据,需要通过地址信号表示的二进制数据来找到它,也就是说每个地址信号代表的的数据是对应着一个数据信号引脚表示的真实数据的,所以嘞,地址信号引脚可以表示多少个数据不就代表这个内存可以存放多少数据嘛,这里的地址信号引脚有A0-A9,也就是10个,因此它可以表示0000000000—-1111111111之间的数据,有多少嘞,一共有1024个。
所以啊,这个内存可以存储1024个1字节的数据,对了,数据信号引脚八个代表一个字节的数据,也就是一个引脚代表1位,也就是1bit,8bit就是一个字节,也即是1byte,然后1024byte又等于1KB,所以,这个内存IC最终的容量就是1KB
你可能会说,这也太小了点了吧,确实小,作为程序员的我们,电脑中使用的内存最低也得8GB吧,这得多少个内存IC啊,这里你可能会有点迷糊,我详细的说下。
再来说内存IC
知道这个吧,我们把这个叫做内存IC,IC是集成电路的意思,这个内存IC其实有两种,你只需要知道其中一种叫做内存颗粒或者内存芯片的就行,我们这里说的内存IC更为准确来说其实就是内存颗粒,是镶嵌在内存条上的,看个图就知道了
这个是内存条,上面那黑的一块一块的其实就是内存颗粒,也就是我们上面说的内存IC,那么你可能会说,上面那个内存IC的容量才1KB,我们平常用的话最低也得8GB,这也镶不下啊,如果都是容量1KB的内存IC,当然镶不下,因此容量更大的内存条则需要容量更大的内存IC,这个口蹄疫通过内存IC上的引脚数量来实现,不过这个也更加复杂有难度,当然,容量越大,内存条也越贵啊,就是这么个道理。
程序员眼中的内存
上面我们把内存稍微深入的说了一遍,相信你看下来一定有不少收获吧,当然,我不排除你没有看懂,如果真的没有看懂,可以多看几遍,当然,也许你是个大神,发现我哪里说错了,如果是这样,还劳烦指教一下哦~
那么我们作为一个程序员,每天就是写写代码,我们需要知道什么内存IC,什么这信号那引脚的吗?
其实吧,我觉不是很有必要,但是知道总比不知道强,不过下面的这些你可一定要知道啊。
如何形象的去理解内存
在之前的文章中曾经介绍过内存,那时候说我们可以把内存看成一个个的小格子,就像这样
这样的一个个的小格子,里面主要存放数据和一些指令,然后每个格子还有对应的编号,这个编号就叫做内存地址,想想,这里的编号是不是就是上面说的内存IC中的地址信号引脚组成的数据,然后每个格子中存放的数据和指令就是通过内存IC中的数据信号引脚来表示的。然后你还可以想象成,每个格子可以存放1字节的数据,也就是内存IC中的那八个信号引脚,对应起来了吧,那么一个容量为1KB的内存(只含有一个内存颗粒,容量就为1KB),这样的格子就有1024个,画成图就是这样的
然后我们还知道在java中是有数据类型的,数据类型的作用简单说就是决定数据在内存中暂用多少内存空间,这里也就是要占用多少个小格子,我们知道在java中int代表整型占4个字节,这里一个格子可以保存1字节的数据,那么int就需要占用4个小格子。对于作为程序员的我们,就应该这样来理解内存,这样更加形象,有助于我们更好的编程。
这些硬核真的硬?
看到这里,你想一下,了解了上述知识,当你写下一个
1 | int a = 10; |
你是不是会想,int向内存申请四个小格子,每个格子有对应的内存地址,然后10转换成二进制数据存放在这些小格子里,实际上是内存IC中的数据信号引脚按照转换后的二进制,也就是0和1来决定每个引脚是+5V直流电压还是0V电压,当然,内存地址即使地址信号引脚啦……