C语言学习(三)内存初识、数据在内存中的保存形式、程序载入内存

(一)内存与存储(硬盘)

  首先要明确一点,内存不同于存储。内存中的数据存储在内存条中。而一般的存储,数据则保存在硬盘中。这里我只给出一些表象的区别,如果还想更深入的了解,请自行搜索,此篇所展示的重点不在于此。

  • 数据存储位置不同。内存中数据存放在内存条中,一般我们提到的存储则指的是硬盘中的存储
  • 读写数据的速度不同。内存条的读写速度比硬盘快的多
  • 数据保存方式不同。内存中存储的是临时数据,主要包括程序编码、程序运行时产生的数据、程序临时缓存、需要临时保存的数据(后续会持久保存在硬盘中)。临时数据,在有些程序停止运行、计算机停止运行后,数据便会消失。与内存相对,硬盘中存储的是永久数据,除非手动删除或者替换,否则数据会一直存在,不会随着计算机停止运行而消失。
  • 作用不同。内存是CPU与硬盘数据之间的缓冲,而CPU只能读取内存中的数据。内存作为一个桥梁的作用,而硬盘是作为存储空间的。(后文会简单介绍这个过程)

(二)数据在内存中的存储(二进制形式存储)

  计算机要处理的信息是多种多样的,如文字、图片、图形、音频、视频等,这些信息在人们眼中是不一样的。但是对于计算机来说,他们在内存中的存在形式都是一样的,都是以二进制的形式来保存。

  因为这种存储形式,想要学习好编程,想要更加出类拔萃,就必须要了解二进制,他是计算机处理数据的基础。

  前面说了,内存中的数据都是存放在内存条中的。内存条是个非常精密的部件,他包含了上亿个电子元器件,他们很小,达到了纳米级别。这些元器件实际上就是电路,电路的电压会发生变化,要么0V,要么5V,只有这两种电压。5V表示通电状态,用1表示;0V表示断电状态,用0表示。所以一个元器件有两种状态,分别用0、1表示。
内存条
  我们通过电路控制来控制这些元器件的通电和断电的状态,这样我们就得到了很多0和1的组合。例如,8个元器件就能得到28=256种不同组合,16个元器件就能得到216=65536种不同组合。虽然一个元器件只能表示两个数值,但是多个结合起来就能表示多个数值了。

  我们可以对每一种组合赋予特定的含义,例如可以分别用00001011、01001000、11101111、11001100来表示 你、好、世、界 这四个字。那么结合起来就是00001011 01001000 11101111 11001100,也就是“你好世界”。

  在一般情况下,我们不一个个使用元器件,而是一组组的使用。我们将8个元器件看成一个单位,就算是表示很小的一个数字,例如1,也需要8个元器件的组合,也就是00000001。

  1个元器件称为1比特(Bit)或1位,8个元器件称为1字节(Byte),那么16个元器件就是2Byte,32个就是4Byte。以此类推:

  • 8x1024个元器件就是1024Byte,简写为1KB
  • 8x1024x1024个元器件就是1024KB,简写为1MB
  • 8x1024x1024x1024个元器件就是1024MB,简写为1GB

  我们通常所说的多少多少KB,MB,GB就是这个意思。

  单位换算:

  • 1 Byte = 1024 Bit
  • 1 KB = 1024 Byte = 210 Byte
  • 1 MB = 1024 KB = 220 Byte
  • 1 GB = 1024 MB = 230 Byte
  • 1 TB = 1024 GB = 240 Byte
  • 1 PB = 1024 TB = 250 Byte
  • 1 EB = 1024 PB = 260 Byte

  我们一般使用计算机时,基本上只会设计KB、MB、GB、TB这几个单位,PB、EB这两个高级单位一般在处理大数据时会用到。

  综上,计算机中不会直接存储图片、文字、gif等这些信息,只有0、1两个数字,计算机也只认识0和1。所以计算机使用二进制,而不是使用十进制。写入内存中的数据,最终都会被转成0和1的组合。

  另外,C语言也能直接对内存进行操作,这些将在后续内容中详细介绍。

(三)载入内存,让程序运行起来

  如果你的电脑上安装了QQ,我们希望与好友聊天。首先,我们要双击打开他,输入账号密码,然后登录就可以了。

  那么QQ是怎么运行起来的呢?

  首先,我们要明确一点,QQ是安装在硬盘中的。

  双击了QQ图标,操作系统就会知道你要运行这个软件,他会在硬盘中找到你安装的QQ软件(安装实际上就是很多数据的集合),将数据复制到内存中。所以,QQ不是在硬盘中运行的,而是在内存中运行的。

  为什么呢?因为内存的运行速度比硬盘快的多。

  对于读写速度,内存>固态硬盘>机械硬盘。机械硬盘是靠电机带动盘片转动来读写数据的,而内存条通过电路来读写数据,电机转动速度肯定没有电的速度快(几乎是光速)。虽然固态硬盘也是通过电路来读写数据,但是因为与内存的控制方式不一样,所以速度仍然不及内存。

  无论是运行QQ,还是编辑Word文档,都是通过先将硬盘中的数据复制到内存中,才能让CPU来处理,这个过程叫做载入内存(Load into memory)。完成这个过程需要一个特殊的程序(软件),这个程序就叫做加载器(Loader)。

  CPU直接与内存打交道,他会读取内存中的数据进行处理,并将结果保存在内存中。如果需要保存到硬盘,才会将数据复制到硬盘中。

  例如,你在编辑Word文档,输入一些文字,虽然我们看到的内容改变了,但是硬盘中的数据没有变化,新增的文字保存到了内存中,按下Ctrl+S才会保存到硬盘。而内存在断电后会丢失(清空)数据,所以如果编辑完Word文档没有保存就关机了,原则上来说(为什么是原则上来说,后面会解释到),那么你将永远无法找回这些内容。

  随着操作系统的不断优化发展,我们会发现我们在非正常关机后(注意,是非正常关机),有些软件在重新开机后会提示你恢复到上次打开的状态(比如WPS、Word等)。这是因为有些软件由于内存的临时性这种机制,对软件本身做了处理,从我们开始运行这些软件开始,他就产生了缓存数据(这里只针对这一类软件,并不是我们通常理解的缓存)。我们在非正常关机后,数据之所以还存在就是因为这个。一般来说,我们在正常关机后(涵盖正常关闭所有软件后再关机),缓存数据不存在。其实原则上来说,非正常关机后缓存数据丢失,这里只针对某些特定程序。

(四)虚拟内存

  如果我们运行的应用程序过多,占用的空间就会超过内存(内存条)的容量。例如我们运行10个程序,需要3G内存,我们内存大小只有2G,这意味着我们需要从硬盘中复制3G的数据到内存中,显然是不可能的。

  操作系统(Operating System,简称OS)为我们解决了这个问题。当程序运行所需要的空间量大于内存容量时,会将内存中暂时不用的数据写回硬盘,需要这些数据时再从硬盘里读取,并将另一部分不用的数据写入硬盘。这样,硬盘中就会有一部分空间存放内存中暂时不用的数据,这部分空间称为虚拟内存(Virtual Memory)。

  3G - 2G = 1G。所以上面的情况需要在硬盘中分配1G的虚拟内存。

  硬盘的读写速度比内存慢很多,反复的数据交换会消耗很多时间。所以如果你的内存太小,会严重影响计算机的运行速度,甚至出现“卡死”的情况,即使你的CPU强劲,也不会有太大改观。所以,建议在条件允许的情况下,将内存升级到8G、16G等,那么在Win7、Win8、Win10等下运行软件就会比较流畅了。

总结:CPU直接从内存中读取数据,处理完成后将结果再写入内存。
CPU、内存、硬盘数据交换

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JayerZhou

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

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

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

打赏作者

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

抵扣说明:

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

余额充值