计算机基础- -认识内存
计算机基础- -认识内存
文章目录
- 计算机基础- -认识内存
- 一、什么是内存
- 二、内存的物理结构
- 1.内存的读写过程
- 2.内存的现实模型
- 三、内存的使用
- 1.指针
- 2.数组是内存的实现
- 3.栈和队列
- 4.链表
- 5.二叉树
一、什么是内存
- 内存(Memory) 是计算机中最重要的部件之一,它是程序与CPU进行沟通的桥梁
计算机中所有程序的运行都是在内存中进行的,因此内存对计算机的影响非常大,内存又被称为主存,其作用是存放CPU中的运算数据, 以及与硬盘等外部存储设备交换的数据
。- 只要计算机在运行中, CPU就会把需要运算的数据调到主存中进行运算, 当运算完成后CPU再将结果传送出来, 主存的运行也决定了计算机的稳定运行。
二、内存的物理结构
在了解一个事物之前,你首先得先需要见过它,你才会有印象,才会有想要了解的兴趣,所以我们首先需要先看一下什么是内存以及它的物理结构是怎样的。
- 内存的内部是由各种IC电路组成的,它的种类很庞大,但是其主要分为三种存储器
随机存储器(RAM)
:内存中最重要的一种,表示既可以从中读取数据,也可以写入数据
。当机器关闭时,内存中的信息会丢失只读存储器(ROM)
:ROM一般只能用于数据的读取, 不能写入数据
, 但是当机器停电时, 这些数据不会丢失。高速缓存(Cache)
:Cache也是我们经常见到的, 它分为一级缓存(L1 Cache) 、二级缓存(L 2 Cache)、三级缓存(L3 Cache) 这些数据, 它位于内存和CPU之间
,是一个读写速度比内存更快的存储器
。当CPU向内存写入数据时, 这些数据也会被写入高速缓存中。当CPU需要读取数据时, 会直接从高速缓存中直接读取, 当然, 如需要的数据在Cache中没有, CPU会再去读取内存中的数据。
内存IC是一个完整的结构,它内部也有电源、地址信号、数据信号、控制信号和用于寻址的IC引脚来进行数据的读写。
下面是一个虚拟的IC引脚示意图
- 图中
VCC和GND表示电源
, A 0-A 9是地址信号的引脚, DO-D 7表示的是控制信号、RD和WR都是好控制信号,用不同的颜色进行了区分 - 将电源连接到VCC和GND后, 就可以对其他引脚传递0和1的信号,大多数情况下,+5V表示1,0V表示0。
- 我们都知道内存是用来存储数据,那么这个内存IC中能存储多少数据呢?
- D0-D7表示的是数据信号, 也就是说, 一次可以输入输出8bit=1byte的数据。
- A 0-A 9是地址信号共十个, 表示可以指定0000000000-1111111111共2的10次方=1024个地址。每个地址都会存放1byte的数据, 因此我们可以得出内存IC的容量就是1KB。
- 如果我们使用的是512MB的内存,这就相当于是512000(512*1000)个内存IC。当然,一台计算机不太可能有这么多个内存IC,然而,通常情况下,一个内存IC会有更多的引脚,也就能存储更多数据。
1.内存的读写过程
让我们把关注点放在内存IC对数据的读写过程上来吧!我们来看一个对内存IC进行数据写入和读取的模型
- 来详细描述一下这个过程, 假设我们要向内存IC中写入1byte的数据的话, 它的过程是这样的:
- 首先给VCC接通+5V的电源, 给GND接通0V的电源, 使用AO-A9来指定数据的存储场所
- 然后再把数据的值输入给DO-D 7的数据信号, 并把WR(write)的值置为1,执行完这些操作后,就可以向内存IC写入数据了
- 读出数据时,只需要
通过AO-A9的地址信号指定数据的存储场所,然后再将RD的值置为1即可。
- 图中的RD和WR又被称为控制信号。其中当WR和RD都为0时,无法进行写入和读取操作。
2.内存的现实模型
为了便于记忆,我们把内存模型映射成为我们现实世界的模型,在现实世界中,内存的模型很想我们生活的楼房。
在这个楼房中,1层可以存储一个字节的数据,楼层号就是地址,下面是内存和楼层整合的模型图
- 我们知道,程序中的数据不仅只有数值,还有
数据类型
的概念,从内存上来看,就是占用内存大小(占用楼层数)的意思
。 即使物理上强制以1个字节为单位来逐一读写数据的内存,在程序中,通过指定其数据类型,也能实现以特定字节数为单位来进行读写。
下面是一个以特定字节数为例来读写指令字节的程序的示例
- 我们分别声明了三个变量a,b,c,并给每个变量赋上了相同的123,这三个变量表示内存的特定区域。
通过变量,即使不指定物理地址,也可以直接完成读写操作,操作系统会自动为变量分配内存地址。
- 这三个变量分别表示1个字节长度的char, 2个字节长度的short, 表示4个字节的long。
因此, 虽然数据都表示的是123,但是其存储时所占的内存大小是不一样的。如下所示
- 这里的123都没有超过每个类型的最大长度, 所以short和long类型为所占用的其他内存空间分配的数值是0,这里我们采用的是
低字节序列
的方式存储
低字节序列:将数据低位存储在内存低位地址。 -->>小端
高字节序列:将数据的高位存储在内存低位的方式称为高字节序列。–>>大端
三、内存的使用
1.指针
- 指针是C语言非常重要的特征,
指针也是一种变量,只不过它所表示的不是数据的值,而是内存的地址
。 - 通过使用指针,可以对任意(非绝对)内存地址的数据进行读写。
- 在了解指针读写的过程前,我们先需要了解如何定义一个指针,和普通的变量不同,在定义指针时,我们通常会在变量名前加一个*号。
例如我们可以用指针定义如下的变量
- 我们以32位计算机为例,32位计算机的内存地址是4字节,在这种情况下,指针的长度也是32位。
- 然而,
变量def却代表了不同的字节长度
, 这是为什么呢? - 实际上,
这些数据类型表示的是从内存中一次读取的字节数
, 比如def的值都为100, 那么使用char类型时就能够从内存中读写1byte的数据, 使用short类型就能够从内存读写2字节的数据, 使用long就能够读写4字节的数据
下面是一个完整的类型字节表
我们可以用图来描述一下这个读写过程
2.数组是内存的实现
- 数组是指
多个相同的数据类型在内存中连续排列
的一种形式。 - 作为数组元素的各个数据会通过下标编号来区分,这个编号也叫做索引,如此一来,就可以对指定索引的元素进行读写操作。
- 首先先来认识一下数组, 我们还是用char、short、long三种元素来定义数组, 数组的元素用[value]扩起来,里面的值代表的是数组的长度,就像下面的定义
数组定义的数据类型, 也表示一次能够读写的内存大小
, char、short、long分别以1、2、4个字节为例进行内存的读写。数组是内存的实现,数组和内存的物理结构完全一致
,尤其是在读写1个字节的时候,当字节数超过1时,只能通过逐个字节来读取
下面是内存的读写过程
3.栈和队列
- 我们上面提到
数组是内存的一种实现
,使用数组能够使编程更加高效,下面我们就来认识一下其他数据结构,通过这些数据结构也可以操作内存的读写。 - 栈
- 栈(stack) 是一种很重要的数据结构,
栈采用LIFO(Last In First Out) 即后入先出的方式对内存进行操作。
- 它就像一个大的收纳箱,你可以往里面放相同类型的东西,比如书,最先放进收纳箱的书在最下面,最后放进收纳箱的书在最上面,如果你想拿书的话,必须从最上面开始取,否则是无法取出最下面的书籍的。
- 栈的数据结构就是这样, 你把书籍压入收纳箱的操作叫做压入(push),你把书籍从收纳箱取出的操作叫做弹出(pop)
它的模型图大概是这样
入栈相当于是增加操作,出栈相当于是删除操作,只不过叫法不一样。
栈和内存不同,它不需要指定元素的地址。它的大概使用如下
在栈中, LIFO方式表示栈的数组中所保存的最后面的数据(Last In) 会被最先读取出来(First On) 。
队列
队列和栈很相似但又不同,相同之处在于队列也不需要指定元素的地址,不同之处在于队列是一种先入先出(First In First Out)的数据结构。
队列在我们生活中的使用很像是我们去景区排队买票
一样,第一个排队的人最先买到票,以此类推,俗话说:先到先得。
它的使用如下:
向队列中写入数据称为EnQueue() 入列, 从队列中读出数据称为DeQueue O) 。
与栈相对, FIFO的方式表示队列中最先所保存的数据会优先被读取出来
- 队列的实现一般有两种:
顺序队列和循环队列
- 我们上面的事例使用的是顺序队列,那么下面我们看一下循环队列的实现方式
环形缓冲区
- 循环队列一般是以环状缓冲区(ringbuffer) 的方式实现的, 它是一种用于表示一个固定尺寸、头尾相连的缓冲区的数据结构,适合缓存数据流。
- 假如我们要用6个元素的数组来实现一个环形缓冲区,这时可以从起始位置开始有序的存储数据,然后再按照存储时的顺序把数据读出。
- 在数组的末尾写入数据后,后一个数据就会从缓冲区的头开始写。这样,数组的末尾和开头就连接了起来。
4.链表
下面我们来介绍一下链表和二叉树,它们都是可以不用考虑索引的顺序就可以对元素进行读写的方式。
通过使用链表,可以高效的对数据元素进行添加和删除操作。而通过使用二叉树,则可以更高效的对数据进行检索。
在实现数组的基础上,除了数据的值之外,通过为其附带上下一个元素的索引,即可实现链表。
数据的值和下一个元素的地址(索引)就构成了一个链表元素,如下所示
对链表的添加和删除都是非常高效的,我们来叙述一下这个添加和删除的过程,假如我们要删除地址为p[2]的元素,链表该如何变化呢?
我们可以看到,
删除地址为p[2]的元素后,直接将链表剔除,并把p[2]前一个位置的元素p[1]的指针域指向p[2]下一个链表元素的数据区
即可。那么对于新添加进来的链表,
需要确定插入位置
,比如要在p[2]和p[3]之间插入地址为p[6]素,需要将p[6]的前一个位置p[2]的指针域改为p[6]的地址,然后将p[6]的指针域改为p[3]的地址即可。
链表的添加不涉及到数据的移动,所以链表的添加和删除很快,而数组的添加设计到数据的移动,所以比较慢,通常情况下,使用数组来检索数据,使用链表来进行添加和删除操作。
5.二叉树
- 二叉树也是一种检索效率非常高的数据结构,二叉树是指在链表的基础上往数组追加元素时,考虑到数组的大小关系,将其分成左右两个方向的表现形式。
- 假如我们把50这个值保存到了数组中,那么,如果接下来要进行值写入的话,就需要和50比较,确定谁大谁小,比50数值大的放右边,小的放左边,
- 二叉树是由链表发展而来,因此二叉树在追加和删除元素方面也是同样有效的。
- 这一切的演变都是以内存为基础的。
计算机基础- -认识内存相关推荐
- 计算机知识讲稿,计算机基础知识讲稿.ppt
计算机基础知识讲稿.ppt 1 第一讲计算机基础知识 一 什么是计算机计算机 是一种用于存储和处理信息的通用机器 2 第一讲计算机基础知识 二 计算机发展史1946年2月 第一台计算机诞生在美国 EN ...
- 计算机配置的内存的容量为1GB,201年计算机应用基础备考练习题及答案
201年计算机应用基础备考练习题及答案 1. 存储一个汉字的内码所需的字节数是___B___.(请看解析) A.1个 B.2个 C.4个 D.8个 [解析]提示:这里所说的汉字内码是指由两个最高位已更 ...
- 华南理工计算机基础知识题,华南理工_计算机应用基础_随堂练习答案(2017年)
华南理工_计算机应用基础_随堂练习答案(2017年) (18页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.9 积分 . . . .华南理工-计算 ...
- 华南理工网络计算机基础知识,2019年华南理工大学网络教育计算机基础随堂练习第一章...
2019年华南理工大学网络教育计算机基础随堂练习第一章 (9页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 第一章 计算机基础知识·第 ...
- 关于计算机网络传输介质 下列叙述正确的是,《计算机基础》习题1-7
4. 算法的基本结构中包括( ) A.顺序结构 B.选择结构 C.循环结构 D.逻辑结构 5.关于Excel图表的数据源,下列叙述不正确的是( ) A. 可以修改图表的数据源 B. 图表的数据源必须是 ...
- B站收藏6.1w+!这门课拯救你薄弱的计算机基础
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个对计算机基础一无所知的蒟蒻... 作为一个所谓的计算机科班出身的人来说,特别难为情的是自己的计算机基 ...
- 计算机基础-计算机硬件
一 为何要学习计算机基础 python是编程语言,即python是语言 语言有英语.法语.葡萄牙语等,但凡是语言,都是用来沟通的介质. 程序员编程的本质就是让计算机去工作,而编程语言就是程序员与计算机 ...
- 数字信息化是计算机处理信息的基础,计算机基础
计算机基本知识及Word,Excel等办公软件的基本操作 计算机基础 一.概述 当今世界已发展到信息时代,其标志是各种信息工具的大量使用.如电脑.手机.电话.打印机.数码相机等.随着社会的进步和生产力 ...
- 用计算机处理信息可以分为四个过程,大学计算机基础期末考试样题3
大学计算机基础考试样题3 学号/考号:姓名:成绩: 一.单选题(共60分,得分:40) 1.二进制数111010转换成十进制数______.(2,得分:) A.29 B.42 C.58 D.50 2. ...
最新文章
- 键盘回车事件导致页面刷新的问题
- centos 系统初始配置优化
- Allegro 如何把铺好铜皮的平面层互换
- excel运行最多行数
- python源码剖析_Python源码剖析 - 对象初探
- 【Q】【poj 1144】【poj 1523】
- stm32 ISP串口下载
- STM32学习——USART收发数据
- 【AD】AD19/20笔记及快捷键
- oracle-- 文字与格式字符串不匹配
- 企业为什么要做ISO14001环境管理体系认证?
- Windows环境下用Anaconda(2.7/3.6)安装GPU版TensorFlow
- oracle怎么关联表查询语句,Oracle数据库的多表关联查询SQL语句
- 《嵌入式 - 语音识别TWen-ASR-ONE开发笔记》第4章 TWen-ASR-ONE PWM调光
- android 9 qq登录,【报Bug】安卓离线打包targetSdkVersion设置28时,在安卓9.0手机上QQ授权登录闪退...
- c 是泛型程序设计语言,在C语言中实现泛型编程
- 打造高效研发团队 (2) —— 研发流程篇
- PCB电路板原理图中VCC、VDD、VEE、VSS、VBAT各表示什么意思?
- JAVA野人_修道野人 用谓词表示法表示修道士和野人的问题 在河的左岸有三个修道士 联合开发网 - pudn.com...
- python数据分析要求高性能计算机_仅需1秒!搞定100万行数据:超强Python数据分析利器...