【编程基础】聊聊C语言-存储世界的奥秘

上一篇讲到了C语言的数据类型,从这篇我们开始讲讲与数据类型有这着千丝万缕联系的变量。

所有语言的变量都是存储在计算机存储系统中,C语言的变量当然也不例外。所以我们先从计算机的存储系统讲起,来揭秘这个存储世界的奥秘。

1.什么是计算机的存储系统?

计算机存储系统就好比是人类的大脑,大脑记忆了人们生活中的信息,计算机存储系统则存储了计算机程序的全部信息。当我们在计算机中输入数据时计算机程序就会操作存储系统将这些信息以各种形式进行存储处理。只不过有些信息关机以后仍然存在,有些则随之消失,有些信息处理的很慢,有些则处理的很快。

2.计算机存储系统有哪些部分组成?

既然称之为系统那么它就是一个比较复杂的机制,计算机的存储系统是分层次进行存储的,就像人类的社会分三六九等一样,所以小编有时在闲时也感慨人类的等级制度是多么的根深蒂固竟然影响着我们生活的方方面面。它的存储层次就像人类的等级金字塔。

上图就是存储系统的金字塔。它分为两个部分:

临时存储区域:由寄存器、缓存(cache)、内存组成,存储在这部分的信息关机就会消失,就像我们这些平民百姓百年以后就会当然无存一样。

永久性存储区域:由ROM、可移动存储器(移动硬盘)、网络存储(云存储)、硬盘存储器(硬盘),存储在这些地方的数据则会保留相当长的时间。也就是那些可以流芳百世或者遗臭万年的人可以享受的待遇。哈哈。。

3.为什么这么来划分层次?

想想也会明白,一个国家的领导只能有一个,而接触它的人也就寥寥无几,而等级越低的人则人数越多可以接触到的人也就越多。计算机存储系统也一样。CPU作为计算机的核心由于它处理速度很快,所以来设计存储系统时就采用了分层的方法。

1)、CPU——Cache 存储层次:由于主存储器的读写速度低于CPU的速度,而CPU每执行一条指令都要访问内存储器,所以CPU总是处于等待状态,严重降低了系统的效率。引入Cache后,在Cache内保存着主存储器内容的部分副本,CPU在读写数据时首先访问Cache。由于Cache的速度与CPU相同,因此CPU就能在零等待状态下迅速地完成数据的读写。

2)、Cache——内存储器存储层次:当Cache中不含有CPU所需的数据时,CPU才去访问内存储器。此时用一个存储器读取周期的时间从内存中读出这个数据后送到CPU,并且,把含有这个数据的整个数据块从内存送到Cache中。

3)、内存储器——外存储器存储层次:当一个程序需要执行时,计算机必须将其程序通过一定的调度算法从外存调入内存。Cache- >内存储器- >外存储器:其容量越来越大,但读写速度越来越低。

4.什么是寄存器?

简单说它就是CPU的小秘,CPU直接访问的就是它。它也叫触发器,它往往和CPU同时钟频率,所以速度非常快。

5.什么是缓存(cache)?

CPU的二级直属单位,由小秘直接访问。目前我们CPU中一般集成了2到3级的Cache,容量从128K到4M。对于CPU总的Cache来说,它们的也是和CPU同频率的,所以理论上执行速度和寄存器应该是相同的,但是Cache往往用来存储一些指令和数据,这样就存在一个命中的问题。当没有命中的时候,需要向下一集的存储器获取新的数据,这时Cache会被lock,所以导致实际的执行速度要比寄存器慢。

6.什么是内存?

它就出了CPU的紫禁城了,作为CPU的外亲为CPU服务。我们目前听的内存一般叫DDR SDRAM,还有早期的SDRAM。而DDR表示双倍的速率,而现在又有了DDR2,DDR3,DDR4,他们的带宽也是越来越大。

7.什么是硬盘?

它是CPU的远房亲戚。目前硬盘主流已经是500G,1T。转速也在7200转左右。相对于8G的内存,一个500G的硬盘可以说是相当的便宜。但是问题在于他的速度非常的慢,从磁盘读取数据需要几个毫秒,而CPU时钟周期是以纳秒计算。磁盘存储是一种机械结构。数据都通过电磁流来改变极性的方式被电磁流写到磁盘上,而通过相反的方式读回。一个硬盘由多个盘片组成,每个盘片被划分为磁道,扇区和最小的单位簇。而每个盘面都有一个磁头用来读取和写入数据。而硬盘的马达装置则控制了磁头的运动。

这就是几乎整个计算机系统的存储结构,下篇我们会讲述C语言的变量是怎么和存储系统中的各个等级进行交流和沟通的,期待大家的捧场。

原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2015-05-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程

零基础如何自学Python

程序员在普通人眼里就像魔法师,一个脚本轻松抢几十盒月饼(虽然最后被开除),一个插件解决春运抢票难题,几十行代码搭建一个 Web 网站,用微信自动和妹纸聊天,在程...

4408
来自专栏养码场

一周播报| 平淡无奇,但暗藏杀机的一周

养码人B:消息写DB的话,TPS、RT 这些能接受吗?你们用的是什么消息中间件?

491
来自专栏Zephery

谈谈个人网站的建立(七)—— 那些建站必备的插件

欢迎访问我的网站http://www.wenzhihuai.com/ 。感谢,如果可以,希望能在GitHub上给个star,GitHub地址https://gi...

3937
来自专栏JAVA高级架构

JVM并不是那么重量级

译者注:很多人误认为JVM是一个很重量级的框架,本文作者之前也是这么认为的,但是在这篇文章中,作者从几个层面分析了一下,可以看出JVM并不是我们想象中的那么“重...

2775
来自专栏大数据文摘

涨姿势 | 如何修复硬盘,以及如何避免硬盘损坏

2124
来自专栏魏琼东

AgileEAS.NET SOA中间件平台更新日志 2015-04-28

一、前言      AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速...

3055
来自专栏程序员互动联盟

程序员如何显著提高效率

曾经有很长的一段时间一直在学习和探索提升工作效率&身心健康的方法。讲讲我个人的经历吧! ? 加速度(一个电脑的有用程度和它里面装的软件数成反比) 给电脑换上SS...

2797
来自专栏北京马哥教育

25台服务器怎样支撑世界第54大网站

摘要:同时使用Linux和Windows平台产品,大量使用静态的方法和类,Stack Overflow是个重度性能控。同时,取代横向扩展,他们坚持着纵向扩展思路...

5659
来自专栏CSDN技术头条

.NET技术+25台服务器怎样支撑世界第54大网站

【编者按】StackOverflow是一个IT技术问答网站,用户可以在网站上提交和回答问题。当下的StackOverflow已拥有400万个用户,4000万个回...

2097
来自专栏大数据和云计算技术

大数据仓库-kudu

数据仓库里面存储引擎是非常重要的,存储引擎的好坏,基本决定了整个数仓的基础。 kudu目标 cloudera公司最近发布了一个kudu存储引擎。按照cloud...

4187

扫码关注云+社区