内存

内存和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. Python 学习路线图

    Python 学习路线图 在这个系列笔记中,我将陆续整理自己在学习 Python 编程语言及其框架的过程中留下的笔记和代码,目的是掌握如何在生产环境中利用各种领域的第三方框架来快速开发应用程序.和大多 ...

  2. java根据配置文件读取值

    <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --> <dependency> ...

  3. ZEGO即构自建MSDN有序网络,为实时音视频传输极致顺畅!

    由于疫情反扑,音视频云通讯的使用需求再次增加,跨机房环境经常遇到网络通信质量不佳的问题,比如延迟.卡顿.画质不清晰等.网络状况是影响用户体验最大因素之一,因此提升用户网络体验的需求被各家产品highl ...

  4. Java扩展Nginx之七:共享内存

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 作为<Java扩展Nginx>系 ...

  5. ENVI大气校正方法反演Landsat 7地表温度

    本文介绍基于ENVI软件,实现对Landsat 7遥感影像加以大气校正方法的地表温度反演操作. 目录 1 图像前期处理与本文理论部分 2 实际操作 2.1 植被覆盖度计算 2.2 地表比辐射率计算 2 ...

  6. win10安装mysql时提示错误:mysqld: Can't change dir to 'C: oftware\mysql\data\' (Errcode: 2 - No such file or directory)

    win10安装解压版mysql时,提示错误: 2019-10-22 09:02:00 2004 [ERROR] Can't find messagefile 'C:\WINDOWS\system32\ ...

  7. 轻松理解Java中的public、private、static和final

    一.概念 1.public和private 两个都是访问权限修饰符,用于控制外界对类内部成员的访问. public:表明对象成员是完全共有的,外界可以随意访问.用public修饰的数据成员.成员函数是 ...

  8. C# 中的 数组[]、ArrayList、List

    C# 中的 数组[].ArrayList.List 数组 在 C# 中,数组实际上是对象,而不只是如在 C 和 C++ 中的连续内存的可寻址区域. 属性: 数组可以是一维.多维或交错的. 创建数组实例 ...

  9. 2023-08-04:村里面一共有 n 栋房子 我们希望通过建造水井和铺设管道来为所有房子供水。 对于每个房子 i,我们有两种可选的供水方案: 一种是直接在房子内建造水井 成本为 wells[i -

    2023-08-04:村里面一共有 n 栋房子 我们希望通过建造水井和铺设管道来为所有房子供水. 对于每个房子 i,我们有两种可选的供水方案: 一种是直接在房子内建造水井 成本为 wells[i - ...

  10. Promise的理解与使用(一)

    一.Promise是什么?Promise是JS中进行异步操作的新的解决方案(旧的方案是回调函数的形式,回调函数里嵌套函数)从语法上来说,Promise是一个构造函数.从功能上来说,用Promise的实 ...