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

相关文章

来自专栏专注数据中心高性能网络技术研发

多线程下的并发理解

写多了多线程程序,对程序的串行与并行和操作系统的并发概念会有点混乱,现在整理一下概念。 并发:   并发原本是处在操作系统层次上,讲的是处理器的逻辑核可以在同一...

35313
来自专栏栗霖积跬步之旅

第一章计算机网络和因特网-day01

什么是因特网: 其一:构成因特网的基本硬件与软件。 其二:为分布式应用提供服务的联网基础设施。 终端机器称为主机( host ) 或者端系统( end syst...

3125
来自专栏H2Cloud

H2Engine服务器引擎介绍

H2Engine服务器引擎介绍 简介   H2Engine服务器引擎架构是轻量级的,与其说是引擎,个人觉得称之为平台更为合适。因为它封装的功能非常精简,但是提供...

3988
来自专栏高性能服务器开发

1 游戏服务器开发的基本体系与服务器端开发的一些建议

近年来,我身边的朋友有很多都从web转向了游戏开发。他们以前都没有做过游戏服务器开发,更谈不上什么经验,而从网上找的例子或游戏方面的知识,又是那么的少,那么的零...

1142
来自专栏Golang语言社区

为什么决定要重新造一个轮子?

目前网上优秀的开源游戏服务器框架也不少(当然与web框架比起来就少太多了),但总结起来都各有各的优缺点,下面列出我在选型过程中的一些考量,希望大家能开放的讨论,...

3917
来自专栏Golang语言社区

Golang语言社区--游戏服务器端开发的一些建议(转载)

大家好,我是Golang语言社区(www.golang.ltd)主编彬哥,本篇给大家转载一篇关于游戏服务器开发的文章。

4347
来自专栏JAVA高级架构

JAVA架构师面试题,如何成为架构师

经常面试一些候选人,整理了下我面试使用的题目,陆陆续续整理出来的题目很多,所以每次会抽一部分来问。答案会在后面的文章中逐渐发布出来。 基础题目 Java线程的...

60711
来自专栏数据科学与人工智能

数据质量监控的那些事

0x00 前言 往往那些不起眼的功能,最能毁掉你的工作成果。 本篇分享一些和数据质量监控相关的内容。数据质量监控是一个在快速发展的业务中最容易被牺牲和忽略的功能...

4265
来自专栏Java架构师进阶

Java架构师面试题全分享,你离架构师还有多远?

经常面试一些候选人,整理了下我面试使用的题目,陆陆续续整理出来的题目很多,所以每次会抽一部分来问。答案会在后面的文章中逐渐发布出来。

592
来自专栏机器人网

以太网不可用于机器人控制?来看看我们的测试结果

以太网是世界上最普及的通信标准。然而,由于其假定的非确定性行为,很少应用在机器人上。在本文中,我们将展示以太网的确定性一面,它可以为机器人通信提供灵活可靠的解决...

3064

扫描关注云+社区