【编程基础】聊聊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 条评论
登录 后参与评论

相关文章

来自专栏大数据文摘

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

2344
来自专栏纯洁的微笑

港股上市!小米开源项目盘点

1203
来自专栏北京马哥教育

Linux Shell从入门到删除根目录跑路指南

shell 作为一门 linux 下使用广泛的系统语言,语法简单,上手容易,但是想要用好,少犯错误,也不是那么容易的一件事,可谓虽是居家旅行之良药,但也是杀人灭...

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

程序员如何显著提高效率

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

2917
来自专栏北京马哥教育

存储系统的那些事

存储系统从其与生俱来的使命来说,就难以摆脱复杂系统的魔咒。无论是从单机时代的文件系统,还是后来C/S或B/S结构下数据库这样的存储中间件兴起,还是如今炙...

4295
来自专栏养码场

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

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

581
来自专栏云计算D1net

云数据备份并不是云灾难恢复

云数据备份不是云灾难恢复。不幸的是,供应商的虚假陈述正在推动企业应该如何使用云备份的误解。许多组织正在考虑云备份,因为它消除了基于磁带的备份技术,自动备份,删除...

3986
来自专栏魏琼东

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

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

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

大数据仓库-kudu

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

5257
来自专栏Crossin的编程教室

【Git 第1课】 什么是Git?

今天起,我会在微信推送文章里穿插一个新的系列:Git。和之前Python入门教程不同,这个系列需要有一点编程的经验。倒不是因为它很难,只是如果没有开发过稍大一点...

32610

扫码关注云+社区

领取腾讯云代金券