内存

内存和CPU之间的交互是计算机体系结构中至关重要的一部分。它们之间的互动类似于一对不可分割的爱侣,彼此相互依赖且密不可分。没有内存,CPU无法执行程序指令,这样计算机就会变得毫无意义。同样地,如果只有内存而没有能够执行指令的CPU,计算机也无法正常运行。

总而言之,内存和CPU之间的交互是计算机正常运行的基础,它们相互依赖,共同完成计算机的各种任务。通过总线进行数据传输,以及通过缓存机制提高数据的访问速度,内存和CPU实现了高效的协作,使计算机能够快速、准确地执行各种指令和操作。

内存的物理结构

在掌握一个事物的理解之前,先要有所接触,这样才能形成印象,进而产生对其了解的兴趣。因此,为了更好地理解内存以及其物理结构,我们首先需要先观察并认识什么是内存以及它的具体构成。

为了更深入地了解内存以及其物理结构,我们需要了解内存的组成。内存内部由各种集成电路(IC)电路组成,其中有几种主要的存储器类型。

首先是随机存储器(RAM),这是内存中最重要的一种。RAM既可以读取数据,也可以写入数据。然而,当机器关闭时,内存中的信息会丢失。

其次是只读存储器(ROM),ROM通常只用于数据的读取,无法写入数据。但是当机器停电时,这些数据不会丢失。

还有一种常见的存储器是高速缓存(Cache),它分为一级缓存(L1 Cache)、二级缓存(L2 Cache)和三级缓存(L3 Cache)。高速缓存位于内存和CPU之间,是一个读写速度比内存更快的存储器。当CPU向内存写入数据时,这些数据也会被写入高速缓存中。当CPU需要读取数据时,会直接从高速缓存中读取。当然,如果需要的数据在缓存中不存在,CPU会再去读取内存中的数据。

内存集成电路是一个完整的结构,它内部还包括电源、地址信号、数据信号、控制信号以及用于寻址的IC引脚,这些都是用于数据的读写操作。下面是一个虚拟的IC引脚示意图。

在图中,VCC和GND代表电源,A0-A9是地址信号引脚,D0-D7代表数据信号,RD和WR是控制信号。我用不同颜色对它们进行了区分。将电源连接到VCC和GND后,其他引脚可以传递0和1的信号。通常情况下,+5V表示1,0V表示0。

我们都知道内存用于存储数据。那么这个内存IC中可以存储多少数据呢?D0-D7代表数据信号,也就是说,一次可以输入输出8位(1字节)的数据。A0-A9是10个地址信号,可以指定00000 00000到11111 11111共1024个地址。每个地址存放1字节的数据,因此我们可以得出内存IC的容量为1KB。

内存的读写过程

让我们把关注点放在内存 IC 对数据的读写过程上来吧!让我们来看一个模型,它展示了对内存 IC 进行数据写入和读取的过程。

为了详细描述这个过程,假设我们想要向内存 IC 中写入 1byte 的数据。下面是这个过程的详细步骤:

  1. 首先,将 VCC 连接到 +5V 的电源,将 GND 连接到 0V 的电源。
  2. 使用 A0 - A9 来指定数据的存储位置。
  3. 输入数据的值到 D0 - D7 的数据信号线。
  4. 将 WR(写入)信号置为1,表示执行写入操作。
  5. 执行完上述操作后,数据将被写入内存 IC。

要读取数据,只需要执行以下步骤:

  1. 通过 A0 - A9 的地址信号指定要读取数据的存储位置。
  2. 将 RD(读取)信号置为1,表示执行读取操作。

图中的 RD 和 WR 也被称为控制信号。当 WR 和 RD 都为 0 时,无法进行写入和读取操作。

内存的现实模型

为了更好地理解和记忆,我们可以将内存模型映射成现实世界中的楼房模型。想象一下,这个楼房代表内存,每一层楼可以存储一个字节的数据。楼层的编号就对应内存的地址。下面是一个将内存和楼层整合的模型图,让我们更好地理解内存的工作原理。

我们知道,程序中的数据不仅仅是数值,还有数据类型的概念。从内存的角度来看,每个数据类型在内存中占用的空间大小可以看作是楼层数。即使在物理层面上,我们以字节为单位来逐一读写内存数据,但在程序中,通过指定数据类型,我们可以实现以特定字节数为单位进行读写。

下面是一个示例程序,演示了如何以特定字节数为单位来读写指令字节:

// 定义变量
char a;
short b;
long c; // 变量赋值
a = 123;
b = 123;
c = 123;

我们分别声明了三个变量 a, b, c,并给每个变量赋值为相同的 123。这三个变量代表了内存中的特定区域。通过使用变量,即使不指定物理地址,我们也可以直接进行读写操作,因为操作系统会自动为变量分配内存地址。

这三个变量分别表示 1 个字节长度的 char,2 个字节长度的 short,和 4 个字节长度的 long。虽然这三个变量存储的数据都是 123,但它们在内存中所占的空间大小是不同的。

在这个例子中,我们使用了低字节序列的方式将数据存储在内存中。这意味着数据的低位存储在内存的低位地址,而高位则存储在内存的高位地址。对于short和long类型的数据,由于123没有超过每个类型的最大长度,所以除了占用的内存空间外,其余的内存空间都被分配为0。这是因为操作系统会自动为变量分配内存地址,并且不同的数据类型在内存中占用的空间大小是不同的。

内存的使用

指针

加长优化语句:指针是C语言中非常重要的特性,它是一种变量,但与普通变量不同,它存储的不是数据的值,而是内存的地址。通过使用指针,我们可以读取和写入任意内存地址上的数据。

在了解指针读写的过程之前,我们需要先了解如何定义一个指针。与普通变量不同,我们通常在变量名前加一个"*"号来定义一个指针。例如,我们可以使用指针定义以下变量:

char *d; // char类型的指针 d 定义
short *e; // short类型的指针 e 定义
long *f; // long类型的指针 f 定义

加长优化语句:让我们以32位计算机为例来解释为什么变量d、e和f代表不同的字节长度。在32位计算机中,内存地址的长度是4字节,因此指针的长度也是32位(4字节)。

然而,变量d、e和f表示的是从内存中一次读取的字节数。假设这些变量的值都为100,那么使用char类型时,我们可以从内存中读取或写入1字节的数据;使用short类型时,我们可以从内存中读取或写入2字节的数据;而使用long类型时,我们可以从内存中读取或写入4字节的数据。

下面是一个完整的类型字节表,它展示了不同数据类型在内存中所占用的字节数:

类型 32位 64位
char 1 1
short 2 2
int 4 4
float 4 4
double 8 8
long 4 8

当涉及到指针和内存操作时,我们可以用图来更直观地描述数据的读写过程。

数组是内存的实现

数组是一种数据结构,它指的是多个相同数据类型的元素在内存中连续排列的形式。每个数组元素都可以通过索引来区分,索引即为元素的编号。通过索引,我们可以对数组中指定位置的元素进行读取和修改操作。

首先,让我们了解一下数组的定义方式。我们可以使用 char、short、long 等数据类型定义数组,并使用[value]来表示数组的长度,如下所示:

char g[100];
short h[100];
long i[100];

数组的数据类型决定了一次可以读写的内存大小。以 char、short、long 为例,它们分别占用 1、2、4 个字节的内存空间。

数组在内存中的实现与内存的物理结构完全一致。特别是在读写单个字节时,无论字节数是多少,都需要逐个字节进行读取或写入。下面是内存读写的过程。

数组是我们学习的第一个数据结构,我们都知道数组的检索效率非常高。至于为什么数组的检索效率如此快,这超出了本文的讨论范围。

总结

本文介绍了内存和CPU之间的交互以及内存的物理结构。内存和CPU的互动是计算机正常运行的基础,它们相互依赖,共同完成计算机的各种任务。内存由各种集成电路(IC)组成,包括RAM、ROM和Cache等存储器类型。内存的读写过程包括指定地址、输入输出数据和控制信号等步骤。内存可以用楼房模型来理解,每层楼对应一个字节的数据。指针是C语言中重要的特性,可以读取和写入任意内存地址上的数据。数组是一种数据结构,通过索引可以对内存中连续排列的元素进行读取和修改。总的来说,内存在计算机中起到了存储和处理数据的重要作用。

内存与CPU:计算机默契交互的关键解析的更多相关文章

  1. 转---高并发Web服务的演变——节约系统内存和CPU

    [问底]徐汉彬:高并发Web服务的演变——节约系统内存和CPU 发表于22小时前| 4223次阅读| 来源CSDN| 22 条评论| 作者徐汉彬 问底Web服务内存CPU并发徐汉彬 摘要:现在的Web ...

  2. centos文件/文件夹操作-检查磁盘、内存、cpu使用情况-vi操作命令

    Part1:CentOS文件/文件夹操作 1.新建文件夹 即创建目录 mkdir 文件名 新建一个名为test的文件夹在home下 vi source1 mkdir /home/test 注意:当创建 ...

  3. 电脑内存和CPU的关系

    http://zhidao.baidu.com/link?url=OmHYd0uUJ3elyOnx1Qpdw1GGhMQBzwbdKSwR62Dn6j0090-sR0sQWR02THP-uPx7cK6 ...

  4. zabbix的安装(一)监控os资源:内存,cpu,io,负载,带宽

    一.Linux下开源监控系统简单介绍1)cacti:存储数据能力强,报警性能差2)nagios:报警性能差,存储数据仅有简单的一段可以判断是否在合理范围内的数据长度,储存在内存中.比如,连续采样数据存 ...

  5. Ambari server:无法显示内存,CPU等使用率

    Ambari server安装完毕后,都能正确显示各种信息.运行了几天后,发现无法显示内存,CPU等信息. 查找日志发现有错误,日志路径:/var/log/ambari-server/ambari-s ...

  6. 在android程序中加入widget(窗口小部件)并与之交互的关键代码

    摘要: widget(窗口小部件)可以增强应用程序的交互性, 是很多应用中都会用到的功能,本文不求大而全,但是会给出程序与widget交互的关键代码 正文: 其实widget是嵌入(embedded) ...

  7. C#实现对远程服务器的内存和CPU监控

    C#实现对远程服务器的内存和CPU监控小记 1.  主要使用到的组件有System.Management.dll 2.  主要类为 :ManagementScope 连接远程服务器示例代码: priv ...

  8. YARN的内存和CPU配置

    时间 2015-06-05 00:00:00  JavaChen's Blog 原文  http://blog.javachen.com/2015/06/05/yarn-memory-and-cpu- ...

  9. Spark Tungsten揭秘 Day4 内存和CPU优化使用

    Spark Tungsten揭秘 Day4 内存和CPU优化使用 今天聚焦于内存和CPU的优化使用,这是Spark2.0提供的关于执行时的非常大的优化部分. 对过去的代码研究,我们会发现,抽象的提高, ...

  10. 系统内存和CPU管理、监控

    本博文的主要内容有 .系统内存管理.监控:vmstat和free -mt .系统CPU管理.监控:sar -u.mpstat.uptime linux系统内存和CPU是在系统运行的过程中不断消耗的资源 ...

随机推荐

  1. 【最新】Delphi XE7 绿色版下载,亲测可用!

    最后更新时间 2017-12-05. 本文整理自2ccc盒子iny的帖子 → 链接到原贴 破解 → 链接 一.绿色版介绍 绿色版除了不包含 FastReport(RAD Studio自带的FastRe ...

  2. js将数字金额转换成中文金额格式

    在开发中我们经常会遇到处理数字的问题,下面介绍一种处理数字金额转换为中文金额的方式: 我们通常使用三种书面数字系统:全球使用的阿拉伯数字系统和两种本地数字系统(繁体.简体).常规时我们使用阿拉伯数字( ...

  3. HTML5CSS3提高

    1 HTML5新特性 1.1 概述 HTML5 的新增特性主要是针对于以前的不足,增加了一些新的标签.新的表单和新的表单属性等. 这些新特性都有兼容性问题,基本是 IE9+ 以上版本的浏览器才支持,如 ...

  4. 《Java极简设计模式》第01章:单例模式(Singleton)

    作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe.gitcode.host 文章汇总:https://binghe.gitcode.host/md/all ...

  5. AgileConfig-1.7.0 发布,支持 SSO 🎉🎉🎉

    AgileConfig 已经好久好久没有更新过比较大的功能了.一是 AgileConfig 本身的定位就是比较轻量,不想集成太多的功能.二是比较忙(懒).但是本次升级给大家带来了一个比较有用的功能 S ...

  6. 通过Scrum实现最大生产力的五种方法

    在数字化.信息化.智能化蓬勃发展的今天,敏捷开发和Scrum已成为重塑项目管理的重要方式. 敏捷是一种体现不同方法的思维方式,包括了Scrum,看板,极限编程(XP).精益开发等众多框架. Scrum ...

  7. 《Kali渗透基础》15. WEB 渗透

    @ 目录 1:WEB 技术 1.1:WEB 攻击面 1.2:HTTP 协议基础 1.3:AJAX 1.4:WEB Service 2:扫描工具 2.1:HTTrack 2.2:Nikto 2.3:Sk ...

  8. iOS视图控件的内容显示和离屏渲染流程

    iOS中UI控件内容显示流程 UIKit界面组成 iOS中组成页面的各个元素基本来自UIKit,我们可以修改布局或自定义绘制来修改UIKit元素的默认展示. UIView的页面显示内容有CALayer ...

  9. hihocoder 1290 DP

    题目利用DP思想,dp[i][j][k]表示robot跑到i行j列目前移动方向为k时,所需要的最小的flip.其中0 <= i <= N,0 <= j <= M,k = rig ...

  10. 《Python魔法大冒险》010 魔法宝箱:列表与元组的探险

    城堡的大门 随着小鱼和魔法师的深入,他们来到了一个古老的废弃城堡.城堡的大门上挂着一个巨大的锁,而锁的旁边有一排小抽屉,每个抽屉里都有一个物品. 魔法师对小鱼说:"这是一个古老的魔法宝箱,小 ...