我们之前讲过CPU,也说了CPU和内存的那点事儿,今天咱就再来说说有关内存,作为一个程序员,你必须要懂的哪那些硬核知识!
大白话聊一聊,很重要!
先来大白话的跟大家聊一聊,我们这里说的内存啊,其实就是说的我们电脑里面的内存条,所以嘞,内存就是内存条,数据要放在这上面才能被cpu读取从而做运算,还有硬盘,就是电脑中的C盘啥的,一个程序需要运行的话需要向内存申请一块独立的内存空间,这个程序本身是存放在硬盘上的,申请完内存之后会存放在内存上。
如果一个程序不经常使用,操作系统会把这个程序的数据从内存上移动到硬盘上,如果这个程序再次被唤醒,操作系统会再次将硬盘上的数据重新交换到内存上,这个时候可以听到硬盘吱吱的响😂
比如我们使用移动硬盘的时候,在电脑上打开移动硬盘上的文件,会听见移动硬盘响起来,这个就是在读取硬盘上的文件,这个效率其实是很低的
内存到底是个啥?
上面我们说了,内存就是内存条,那么这句话准确吗?肯定有人说,不对,什么内存就是内存条啊,净是瞎扯😒,那到底是不是呢?其实还真不是,那我为啥还那样说,形象啊,有助于你理解啊😂,接下来咱们就来深挖一下,过后,你就明白了!
先从内存条说说
前面说过了,内存条嘛,作为程序员的我们肯定都知道,就是那短短的扁扁的一个小电路板,而且还不便宜,对的,实际存在的这个内存设备也就是我们说的内存条,它是一个电子元件,内存的实质是内存IC(后面会详细说),这个IC就是集成电路的意思。
内存条不会忘了长啥样吧?来个图
我之前经常买金士顿的😁
内存就是内存条?
不过嘞,我们再详细的来说,内存其实是个比较广的概念,啥意思嘞,你说这个内存,碰到杠精就会说,你说的内存是物理内存还是虚拟内存啊,我们这里说的内存肯定是与我们平常写代码有密切关系的,也就是保存我们程序数据为我们的程序运行提供临时存储的地方,基于此,我们这里来明确下我们这里说的内存
我们这里说的内存实际上说的是指物理内存,也就是实际存在的一个设备,通常来说就是指我们安装内存条而获得的存储空间,我们使用它的主要作用就是在计算机运行的时候为操作系统和各种程序提供一种临时存储。
现在知道我们这里说的内存一般是指物理内存,我们习惯了也就直接叫内存了,这个内存更为正式的来说是随机存取存储器,英文名称是Random Access Memory,缩写就是取首字母也就是RAM,所以啊记住了,以后再看到RAM就是指的内存,也就是随机存取存储器,另外它还叫做主存,也就是主要的存储器,是电脑中最主要的存储器,因为它是直接与CPU进行数据交换,读写速度较快,用来加载各种各样的程序和数据来供CPU直接运行与使用。
现在简单总结下,作为程序员来说,我们需要知道的内存指的是能够与CPU直接进行数据交换的存储器,放在电脑上就是内存条,正式的名字叫做随机存取存储器,也叫做主存,是电脑中最主要的存储器,英文缩写是RAM
内存?是不是还有外存?
内存和外存?这个咋理解?内存安装在里面,外存安装在外面?不对吧,内存条是安装在电脑内部的,硬盘也是安装在电脑内部的啊?
这里的内存和外存可不是这样理解的,简单来说,内存就是断电的话保存的数据会丢失,对应的外存断电后里面保存的数据不会丢失。
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个小格子。对于作为程序员的我们,就应该这样来理解内存,这样更加形象,有助于我们更好的编程。
这些硬核真的硬?
看到这里,你想一下,了解了上述知识,下载在当你写下一个
int a = 10;
的时候,你是不是会想,int向内存申请四个小格子,每个格子有对应的内存地址,然后10转换成二进制数据存放在这些小格子里,实际上是内存IC中的数据信号引脚按照转换后的二进制,也就是0和1来决定每个引脚是+5V直流电压还是0V电压,当然,内存地址即使地址信号引脚啦……
然后巴拉巴拉想一大堆,你看,了解了这些关于内存的硬核知识,我们写代码是不是就不仅知其然还知其所以然了😁
好啦,关于内存,咱就先聊这些,这可都是你必须知道的硬核知识啊,对了,推荐和以下几篇一起食用,风味更佳!
相信看过这三篇文章以后,你一定能收获很多干货!,喜欢的话别忘了点赞哦!😍
感谢阅读
大家好,我是ithuangqing,一路走来积累了不少的学习经验和方法,而且收集了大量的精品学习资源,现在维护了一个公众号【编码之外】,寓意就是在编码之外也要不停的学习,主要分享java技术相关的原创文章,现在主要在写数据结构与算法,计算机基础,线程和并发以及虚拟机这块的原创,另外针对小白还在连载一套《小白的java自学课》,力求通俗易懂,由浅入深。同时我也是个工具控,经常分享一些高效率的黑科技工具及网站。
对了,公众号还分享了很多我的学习心得,可以一起探讨探讨!
关注公众号,后台回复“庆哥”,2019最新java自学资源立马送上!更多原创精彩尽在【编码之外】
感谢各位大大的阅读🥰
来源:CSDN
作者:ithuangqing
链接:https://blog.csdn.net/sinat_33921105/article/details/104111467