01、目录
02、前言
在这之前,我已经聊过CPU 和 一个程序在计算机中是怎么跑起来的。那么今天再来聊聊内存,当然,建议与前两篇结合看,都是按照顺序来的,知道你们懒,链接放下面了:
何谓CPU:https://blog.csdn.net/m0_43458204/article/details/107637942
一个程序在计算机中是如何运行的:https://blog.csdn.net/m0_43458204/article/details/107700321
废话少说,开始今天的概念知识!
我们这里说的内存啊,其实就是说的我们电脑里面的内存条,所以嘞,内存就是内存条,数据要放在这上面才能被cpu读取从而做运算,还有硬盘,就是电脑中的C盘啥的,一个程序需要运行的话需要向内存申请一块独立的内存空间,这个程序本身是存放在硬盘上的,申请完内存之后会存放在内存上。
如果一个程序不经常使用,操作系统会把这个程序的数据从内存上移动到硬盘上,如果这个程序再次被唤醒,操作系统会再次将硬盘上的数据重新交换到内存上,这个时候可以听到硬盘吱吱的响😂!
比如我们使用移动硬盘的时候,在电脑上打开移动硬盘上的文件,会听见移动硬盘响起来,这个就是在读取硬盘上的文件,这个效率其实是很低的
03、内存与内存条
3.1 内存本质?
上面我们说了,内存就是内存条,那么这句话准确吗?肯定有人说,不对,什么内存就是内存条啊,净是瞎扯😒,那到底是不是呢?其实还真不是,那我为啥还那样说,形象啊,有助于你理解啊😂,接下来咱们就来深挖一下,过后,你就明白了!
前面说过了,内存条嘛,作为程序员的我们肯定都知道,就是那短短的扁扁的一个小电路板,而且还不便宜,对的,实际存在的这个内存设备也就是我们说的内存条,它是一个电子元件,内存的实质是内存IC(后面会详细说),这个IC就是集成电路的意思。
内存条不会忘了长啥样吧?来个图:
以前玩游戏(吃鸡),买的金士顿内存条。
3.2 日常中的内存
不过嘞,我们再详细的来说,内存其实是个比较广的概念,啥意思嘞,你说这个内存,碰到杠精就会说,你说的内存是物理内存还是虚拟内存啊,我们这里说的内存肯定是与我们平常写代码有密切关系的,也就是保存我们程序数据为我们的程序运行提供临时存储的地方,基于此,我们这里来明确下我们这里说的内存
我们这里说的内存实际上说的是指物理内存,也就是实际存在的一个设备,通常来说就是指我们安装内存条而获得的存储空间,我们使用它的主要作用就是在计算机运行的时候为操作系统和各种程序提供一种临时存储。通常呢,就体现为内存条。
现在知道我们这里说的内存一般是指物理内存,我们习惯了也就直接叫内存了,这个内存更为正式的来说是随机存取存储器,英文名称是Random Access Memory,缩写就是取首字母也就是RAM,所以啊记住了,以后再看到RAM就是指的内存,也就是随机存取存储器,另外它还叫做主存,也就是主要的存储器,是电脑中最主要的存储器,因为它是直接与CPU进行数据交换,读写速度较快,用来加载各种各样的程序和数据来供CPU直接运行与使用。
现在简单小结下,作为程序员来说,我们需要知道的内存指的是能够与CPU直接进行数据交换的存储器,放在电脑上就是内存条,正式的名字叫做随机存取存储器,也叫做主存,是电脑中最主要的存储器,英文缩写是RAM。
3.3 DDR3与DDR4
不知道大家有没有对内存和外存区分的概念!
内存就是断电的话保存的数据会丢失,对应的外存断电后里面保存的数据不会丢失。
想必买过内存条的人都会知道,得先了解自己电脑支持什么类型的内存条,然后去对号入座,不然就是白忙活,买来也用不了。人品高,乱买都买对,当我没说。
我们已经知道了啥是内存,也知道了我们这里的内存也是主存,RAM,它们都是一个品种,一样的,这个RAM是一般的随机存取存储器,除此之外还有DRAM,这又是啥嘞,RAM是随机存取存储器。
- DRAM:动态随机存取存储器(Dynamic Random Access Memory)
- SRAM:静态随机存取存储器(Static Random Access Memory)
DRAM结构简单,单位体积内容量高成本低,但是访问速度慢,耗电大,相应的SRAM结构复杂,成本高等。无论DRAM还是SRAM都属于内存,也就是断电会丢失数据,综合来说DRAM的性价比比较高,扩展性也很好,所以就成了现在广为流行的电脑主存
下面我们来扩展认知了,然后就到了DDR3,DDR4。
- SDRAM:同步动态随机存取存储器(Synchronization Dynamic Random Access Memory)
- DDR SDRAM:双倍数据率 同步动态随机存取存储器(Double Data Ratio Synchronization Dynamic Random Access Memory)
- DDR3 SDRAM:第三代双倍数据率 同步动态随机存取存储器(3 Double Data Ratio Synchronization Dynamic Random Access Memory)
- DDR4 SDRAM:第四代双倍数据率 同步动态随机存取存储器(4 Double Data Ratio Synchronization Dynamic Random Access Memory)
是不是有种原来如此的感慨。
04、内存图解
我们之前已经说过了内存就是主存,也叫做随机存取存储器,缩写是RAM,然后还说了什么DRAM,SRAM然后还有DDR SDRAM等等,这些其实都是内存,只不过是各自的形式不同,但是实实在在的一个电路板,就我们能拿在手里的内存条,他们的物理机制其实都差不多,都有什么电源,地址信号,数据信号和控制信号等等,下面我们来看一张图你就清楚了
这个内存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表示的数据,这其实就是二进制啊。
但是一般来说稳定的话,是0~2.5V表示0,2.6到5V是表示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的容量才1KB,我们平常用的话最低也得8GB,这也镶不下啊,如果都是容量1KB的内存IC,当然镶不下,因此容量更大的内存条则需要容量更大的内存IC,这个口蹄疫通过内存IC上的引脚数量来实现,不过这个也更加复杂有难度,当然,容量越大,内存条也越贵啊,就是这么个道理。
Programmer 眼中的内存
上面我们把内存稍微深入的说了一遍,相信你看下来一定有不少收获吧,当然,我不排除你没有看懂😂,如果真的没有看懂,可以多看几遍,当然,也许你是个大神,发现我哪里说错了,如果是这样,还劳烦指教一下哦😁
那么我们作为一个程序员,每天就是写写代码,我们需要知道什么内存IC,什么这信号那引脚的吗?
其实吧,我觉不是很有必要,但是知道总比不知道强,不过下面的这些你可一定要知道啊。
在之前的文章中曾经介绍过内存,那时候说我们可以把内存看成一个个的小格子,就像这样:
这样的一个个的小格子,里面主要存放数据和一些指令,然后每个格子还有对应的编号,这个编号就叫做内存地址,想想,这里的编号是不是就是上面说的内存IC中的地址信号引脚组成的数据,然后每个格子中存放的数据和指令就是通过内存IC中的数据信号引脚来表示的。然后你还可以想象成,每个格子可以存放1字节的数据,也就是内存IC中的那八个信号引脚,对应起来了吧,那么一个容量为1KB的内存(只含有一个内存颗粒,容量就为1KB),这样的格子就有1024个,画成图就是这样的:
然后我们还知道在C++中是有数据类型的,数据类型的作用简单说就是决定数据在内存中暂用多少内存空间,这里也就是要占用多少个小格子,我们知道在C++中32位机器上int代表整型占4个字节,这里一个格子可以保存1字节的数据,那么int就需要占用4个小格子。对于作为程序员的我们,就应该这样来理解内存,这样更加形象,有助于我们更好的编程。
看到这里,你想一下,了解了上述知识,下载在当你写下一个
int a = 10; //二进制:0000 1010
的时候,你是不是会想,int向内存申请四个小格子,每个格子有对应的内存地址,然后10转换成二进制数据存放在这些小格子里,实际上是内存IC中的数据信号引脚按照转换后的二进制,也就是0和1来决定每个引脚是+5V直流电压还是0V电压,当然,内存地址即使地址信号引脚啦……
然后巴拉巴拉想一大堆,你看,了解了这些关于内存的硬核知识,我们写代码是不是就不仅知其然还知其所以然了😁
好啦,关于内存,咱就先聊这些,这可都是你必须知道的硬核知识啊
05、总结
其实,上面的内容,特别是IC啊,这种电子耦合元件,程序员不一定非要掌握,但是如果你也是一个有梦想,想要自己干的人,那么,这些东西,你真的绕不过去。趁现在还有精力,多学点总是没有坏处的。
非技术文章,欢迎转载。谢谢!