2025年8月8日
那么,编程软件是如何运作的呢?
首先,我们要明确,你安装的编程软件是存储在你硬盘中的。
双击软件图标,操作系统便会启动该程序,它会在硬盘中查找你安装的编程软件,将数据(实际上就是程序的代码和数据)加载到内存中。
对!
没错,就是加载到内存!
编程软件不是在硬盘上运行的,而是在内存中运行的。
这是因为内存的读写速度比硬盘快得多。
对于读写速度,我们有这样一个顺序:内存 > 固态硬盘 > 机械硬盘。
机械硬盘是通过电机带动盘片转动来读写数据的,而内存条通过电路进行数据交换,电机的转速自然不能与光速相提并论。
虽然固态硬盘也是通过电路读写数据,但由于控制方式的不同,其速度也不及内存。
当运行一个编程软件时,首先需要将硬盘上的程序代码和数据复制到内存中。只有将它们加载到内存后,CPU才能对这些数据进行处理。这个过程我们称之为“载入内存”(Load into Memory)。
完成这个过程需要一个特殊的程序——加载器(Loader)。
随后,CPU会直接从内存中读取数据并进行处理,并将处理结果保存回内存。
如果需要将这些结果持久化存储,CPU会将这些数据复制到硬盘上。
比如,当你编辑一个文档时,虽然你在屏幕上看到了所有的改动,但实际上,硬盘上的文件并没有立即更新。你的修改只是暂时保存在了内存中。只有当按下Ctrl+S进行保存操作后,这些改动才会被写入硬盘。
由于内存一旦断电就会丢失数据,所以在编程过程中一定要记得经常保存你的代码和文档,以免重要信息丢失。
虚拟内存
如果我们同时运行多个大型程序,占用的空间可能会超过内存的容量。
比如,电脑的内存容量是G,而你同时运行的程序共占用G的空间,显然是不可能的。操作系统(Operating System,简称OS)为我们解决了这个难题:当程序需要的空间大于内存容量时,它会将内存中暂时不用的数据写回到硬盘;需要这些数据的时候再从硬盘中读取,并将另外一部分不用的数据写入硬盘。
这样,硬盘中就会有一部分空间被用来存放内存中的暂时不用的数据。这部分空间就叫做“虚拟内存”(Virtual Memory)。
内存与CPU之间的关系
CPU直接从内存中读取数据,处理完成后将结果再写入内存。
图1:CPU、内存和主板的关系
### 数据在内存中的存储方式
计算机要处理的信息种类繁多,比如十进制数、文字、符号、图形、音频、视频等。但这些信息在计算机内部都是以二进制的形式表示的。
#### 二进制与编程
要想学习编程,就必须了解二进制。它是计算机处理数据的基础。
#### 内存条的结构
内存条是一个非常精密的部件,含有上亿个电子元器件。这些元器件虽然非常小,达到了纳米级别,但本质上是电路。
电路的电压会变化,要么是V(无电状态),要么是5V(通电状态),只有这两种电压。
通过控制这些元器件的电通断,我们可以得到很多0和1的组合。
比如,8个元器件可以组成256种不同的组合,16个元器件可以有2^16=65536种不同的组合。
#### 数字与字符的转换
虽然一个元器件只能表示一个数值,但多个元器件组合起来就可以表示更大的数。
例如,我们要表示“编程”两个字,可以把每个字的内部电路状态用一组二进制数字来表示。
那么,我们就可以用数字1111111111111111111111来表示“C语言中文网”。
#### 单位换算
在计算机中,数据的大小通常用字节(Byte)来衡量。1字节等于8位,即2的8次方。因此,8个元器件可以组成1字节,也可以表示1个字节大小的数。
单位换算:1Byte=8bit 1KB=1024Byte 1MB=1024KB
你看,在内存中没有abc这样的字符,也没有gif、jpg这样的图片,只有0和1这两个数字。计算机也只认识和1。
#### SCII与Unicode编码
这是经常容易混淆的一个点。
SCII码:我们知道一个二进制位(Bit)有0和1两种状态,一个字节(Byte)有8个二进制位,可以表示256种不同的状态。这些不同的状态对应着不同的符号。例如 SCII码规定了A到Z的英文字符与二进制位的对应关系。
Unicode编码:随着计算机的普及,使用它的人越来越多,不仅限于美国。这时候SCII编码的问题就显现出来了。因为SCII只能够表示英文字符,无法表示汉字、日文等其他语言的字符。为了解决这个问题,1990年代制定了一套新的标准,这就是Unicode编码(Unique Code)。
总结:了解了编程软件的基础运作原理和二进制的基本知识,对于我们学习编程是至关重要的。希望这篇文章对您有所帮助。