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

相关文章

来自专栏数据和云

微信课堂:化解控制文件归档日志查询缓慢及ASM执行计划一则

在我们的技术讨论群『云和恩墨大讲堂』中,还有日常的微信互动中,经常有朋友会提出一些有趣的小问题,在空闲的时候,我希望能够记录下来,和大家做一点小分享,以点滴的知...

904
来自专栏重庆的技术分享区

优化时间序列应用程序的数据查询

原文地址:https://dzone.com/articles/optimizing-data-queries-for-time-series-applicat...

1958
来自专栏Linyb极客之路

一位Java工程师的阶段性工作总结

1.1.1、通常的模块分布:一般如果你要实现一个web应用,你从后台将数据展示到前端页面,在一个比较大的公司,你少不了跟其他项目有交集(你调用他的接口,他依赖你...

823
来自专栏乐沙弥的世界

Percona XtraDB Cluster Perfomance Schema Instrumentation

为了改进监控,Percona XtraDB集群实施了一个基础架构,将Galera仪器(mutexes, cond-variables, files, threa...

620
来自专栏Golang语言社区

【Go 语言社区】Golang语言的time.Sleep

首先:time.sleep单位为:1ns (纳秒) 转换单位: 1纳秒 =1000皮秒 1纳秒 =0.001 微秒 1纳秒 ...

3997
来自专栏微信公众号:Java团长

一位Java工程师的阶段性工作总结

1.1.1、通常的模块分布:一般如果你要实现一个web应用,你从后台将数据展示到前端页面,在一个比较大的公司,你少不了跟其他项目有交集(你调用他的接口,他依赖你...

611
来自专栏菩提树下的杨过

温故而知新:设计模式之抽象工厂(AbstractFactory)

抽象工厂主要用来解决多个系列的对象实例问题。 问题的应用场景(来源于李建忠老师的webcast讲座): 如果有一款游戏,里面有"道路,房屋,隧道,丛林"这四类基...

1907
来自专栏腾讯技术工程官方号的专栏

TDSQL 全时态数据库系统--核心技术

1933
来自专栏zhisheng

小白谈数据脱敏

什么是数据脱敏? 百度百科是这样描述的: 数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。在涉及客户安全数据或者一些商业性敏感...

35910
来自专栏码神联盟

碎片化 | 第四阶段-49-hibernate之HQL查询操作-视频

本套视频从Java基础到架构模式以及AI算法,整体视频以“碎片化”学习的模式,提供给大家 ,并配备实际项目为案例,让大家在坐车、吃饭、午休、蹲坑的时候,都可以学...

3386

扫码关注云+社区