1.计算机方面的知识:
不管是台式机还是笔记本,它们内部都有一块电路板,上面密密麻麻地布满了大小不一的电子器件,包括CPU、内存条、网卡、各种插槽和接口等,这就是“主板”,如下图所示。
这张图片主要让读者了解主板的构造,你不必理解图片中各个晦涩的名词。
![](http://c.biancheng.net/cpp/uploads/allimg/141105/1-141105111500539.jpg)
图1:计算机主板
CPU
CPU (Central Processing Unit) 就是“中央处理器”,是计算机的大脑,负责计算、思考、处理数据、控制其他设备等,没有CPU,计算机就无从谈起,CPU的速度直接决定了电脑的运行速度。如下图所示:![](http://c.biancheng.net/cpp/uploads/allimg/141105/1-141105110336228.jpg)
图2:CPU
目前市场上常见的应用于台式机和笔记本的CPU有 Intel(英特尔) 和 AMD(超微半导体公司),Intel 性能好一点,占据了大部分份额。
关于CPU的位数,我们将在《 C语言和内存》中的《 虚拟地址空间以及编译模式》一节讲解。CPU有很多针脚,直接插在主板上,如下图所示:
![](http://c.biancheng.net/cpp/uploads/allimg/141105/1-1411051106134C.jpg)
图3:CPU插槽
内存
内存就是下面的长方形“卡片”,也叫 内存条。![](http://c.biancheng.net/cpp/uploads/allimg/141105/1-141105094G21A.jpg)
图4:内存条
我们常说电脑有几个G的内存,就是指它的大小,市面上常见的有2G、4G、8G等。
C语言程序必须加载到内存才能运行,CPU 也被设计为只能从内存中读取数据和指令,一名不了解内存的程序员,注定无法彻底理解程序的运行原理,不能让自己的编程水平有一个质的飞越,因此我们特地增加了《 C语言和内存》专题,让大家彻底明白内存,并运用到实际编程中。内存条插在主板上的特定插槽内,如下所示是台式机的内存插槽:
![](http://c.biancheng.net/cpp/uploads/allimg/141105/1-141105095G1G6.jpg)
图5:台式机内存插槽
不过笔记本为了节省空间,一般将内存条平放,如下所示:
![](http://c.biancheng.net/cpp/uploads/allimg/141105/1-141105095QM07.jpg)
图6:笔记本内存插槽
主板上一般有多个内存插槽,可以插多个内存条,电脑内存大小是所有内存条大小之和。内存条也被称为 主存。
硬盘
硬盘是用来保存数据的。打开一个文件,编辑完成后,Ctrl+S 就保存到了硬盘,断电不会丢失。硬盘分为 机械硬盘(HDD)和 固态硬盘(SSD)。机械硬盘就像VCD或DVD,由一个精密电机带动光盘快速转动来让探头读取和写入数据。如下图所示:
![](http://c.biancheng.net/cpp/uploads/allimg/141105/1-141105104134953.jpg)
图7:机械硬盘
固态硬盘就像手机内存卡或U盘,内部有上亿个电子元器件,非常细小,达到纳米级别,通过电路来读取和写入数据。如下图所示:
![](http://c.biancheng.net/cpp/uploads/allimg/141105/1-14110510453O42.jpg)
图8:固态硬盘
与机械硬盘相比,固态硬盘在读写速度上有很大优势,一个很明显的例子就是电脑安装了固态硬盘开机速度很快,很少出现卡顿的现象。
硬盘不是直接插在主板上,而是通过导线与主板相连,所以叫外部存储,也是电脑外设的一部分,不过不像鼠标、键盘、U盘等,没有也可以正常工作,硬盘是电脑正常运行所必需的外部设备。
协调
CPU、内存、硬盘等部件不能各自为战,它们通过主板连接在一起,由CPU控制,协调工作。2.程序与内存:
如果你的电脑上安装了QQ,你希望和好友聊天,会双击QQ图标,打开QQ软件,输入账号和密码,然后登录就可以了。
那么,QQ是怎么运行起来的呢?
首先,有一点你要明确,你安装的QQ软件是保存在硬盘中的。
双击QQ图标,操作系统就会知道你要运行这个软件,它会在硬盘中找到你安装的QQ软件,将数据(安装的软件本质上就是很多数据的集合)复制到内存。对!就是复制到内存!QQ不是在硬盘中运行的,而是在内存中运行的。
为什么呢?因为内存的读写速度比硬盘快很多。
对于读写速度,内存 > 固态硬盘 > 机械硬盘。机械硬盘是靠电机带动盘片转动来读写数据的,而内存条通过电路来读写数据,电机的转速肯定没有电的传输速度(几乎是光速)快。虽然固态硬盘也是通过电路来读写数据,但是因为与内存的控制方式不一样,速度也不及内存。
所以,不管是运行QQ还是编辑Word文档,都是先将硬盘上的数据复制到内存,才能让CPU来处理,这个过程就叫作载入内存(Load into Memory)。完成这个过程需要一个特殊的程序(软件),这个程序就叫做加载器(Loader)。
CPU直接与内存打交道,它会读取内存中的数据进行处理,并将结果保存到内存。如果需要保存到硬盘,才会将内存中的数据复制到硬盘。
例如,打开Word文档,输入一些文字,虽然我们看到的不一样了,但是硬盘中的文档没有改变,新增的文字暂时保存到了内存,Ctrl+S才会保存到硬盘。因为内存断电后会丢失数据,所以如果你编辑完Word文档忘记保存就关机了,那么你将永远无法找回这些内容。
虚拟内存
如果我们运行的程序较多,占用的空间就会超过内存(内存条)容量。例如计算机的内存容量为2G,却运行着10个程序,这10个程序共占用3G的空间,也就意味着需要从硬盘复制 3G 的数据到内存,这显然是不可能的。操作系统(Operating System,简称 OS)为我们解决了这个问题:当程序运行需要的空间大于内存容量时,会将内存中暂时不用的数据再写回硬盘;需要这些数据时再从硬盘中读取,并将另外一部分不用的数据写入硬盘。这样,硬盘中就会有一部分空间用来存放内存中暂时不用的数据。这一部分空间就叫做 虚拟内存(Virtual Memory)。
3G - 2G = 1G,上面的情况需要在硬盘上分配 1G 的虚拟内存。
硬盘的读写速度比内存慢很多,反复交换数据会消耗很多时间,所以如果你的内存太小,会严重影响计算机的运行速度,甚至会出现”卡死“现象,即使CPU强劲,也不会有大的改观。如果经济条件允许,建议将内存升级为 4G,在 win7、win8 下运行软件就会比较流畅了。
关于内存的更多知识,大家在学习完《C语言入门教程》后,请继续阅读《 C语言和内存》,我敢保证你将会顿悟。
总结:CPU直接从内存中读取数据,处理完成后将结果再写入内存。
![](http://c.biancheng.net/cpp/uploads/allimg/141105/1-141105150121320.png)
图1:CPU、内存、硬盘和主板的关系
3.八进制与十进制
除了二进制,编程中也经常使用八进制和十六进制。
八进制有0~7共8个数字,基数为8,逢八进一,借一当八;十六进制中,用A来表示10,B表示11,C表示12,D表示13,E表示14,F表示15,因此有0~F共16个数字,基数为16,逢16进1,借1当16。例如:
- 八进制 3072 = 3×83 + 0×82 + 7×81 + 2×80 = 1536 + 0 + 56 + 2 = 1594
- 十六进制 E3F9 = 14×163 + 3×162 + 15×161 + 9×160 = 57344 + 768 + 240 + 9 = 58361
十进制 | 二进制 | 八进制 | 十六进制 | 十进制 | 二进制 | 八进制 | 十六进制 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 10 | 1010 | 12 | A |
1 | 1 | 1 | 1 | 11 | 1011 | 13 | B |
2 | 10 | 2 | 2 | 12 | 1100 | 14 | C |
3 | 11 | 3 | 3 | 13 | 1101 | 15 | D |
4 | 100 | 4 | 4 | 14 | 1110 | 16 | E |
5 | 101 | 5 | 5 | 15 | 1111 | 17 | F |
6 | 110 | 6 | 6 | 16 | 10000 | 20 | 10 |
7 | 111 | 7 | 7 | 17 | 10001 | 21 | 11 |
8 | 1000 | 10 | 8 | 18 | 10010 | 22 | 12 |
9 | 1001 | 11 | 9 | 19 | 10011 | 23 | 13 |
在C语言中,八进制通常以“0”开头(注意是数字 0,而不是字母 o),例如 0307;十六进制通常以“0x”或“0X”开头(不区分大小写),例如 0xE27 或 0X89F。
下面请看八进制和十六进制加法运算的两个例子。
这是选学内容,如果你只想了解八进制和十六进制,不希望深入研究它们的运算,请忽略这部分内容,不会影响后边的学习。1) 八进制加法:0107 + 0274 = 0403
![](http://c.biancheng.net/cpp/uploads/allimg/150302/1-1503020U952962.png)
图1:八进制加法运算
2) 十六进制加法:0XA2B + 0X276 = 0XCA1
![](http://c.biancheng.net/cpp/uploads/allimg/150302/1-1503020Z940a2.png)
图2:十六进制加法运算
如果你有兴趣了解不同进制之间是如何转换的,请猛击: 进制之间的转换