熟练使用有棱有角的内存

news/发布时间2024/5/20 17:00:57

     内存是一种名为内存IC的电子元件,它有多种形式,从外部来看基本机制都一样,其中有电源、地址信号、数据信号、控制信号等用于输入输出的大量引脚,通过其指定地址进行数据读写。下图的例子是内存IC的一种——RAM:

其中VCC和GND是电源,A0~A9是地址信号的引脚,D0~D7是数据信号的引脚,RD和WR是控制信号的引脚。将电源接到VCC和GND后,就可以给其他引脚传递像0或1这样的信号,一般+5V的直流电压表示1,0V表示0。
    既然了解了内存IC的结构,那么它能存储多少数据呢?就以上图为例来说明。数据信号引脚有8个(D0~D7),表示一次输入输出8位(1字位)数据,地址信号引脚有10个(A0~A9)表示可以指定1024个地址。而地址用来表示数据的存储场所,所以一个内存IC中可存储1024个1字节的数据,又因为1024=1K,即内存IC的容量就是1KB。一台计算机中不太可能放入如今512000个1KB的内存IC,但通常计算机使用的内存IC会有更多的地址信号引脚,因此,只用数个内存IC就可以达到512MB的容量。
    让我们假设在内存IC中写入1字节的数据,不过怎么实现呢?我们可以给VCC接入+5V,给GND接入0V的电源,并使用A0~A9的地址信号来指定数据的存储场所,然后再把数据的值输入给D0~D7的数据信号,把WR(write的缩写)信号设定成1,接下来就可以写入数据了。写入数据后自然要读取数据,这时只需通过地址信号指定数据的存储场所将RD(read的缩写)信号设成1就可以了。另外,WR和RD这样可以让IC运行的信号称为控制信号,当两者都为0时写入与读取操作都无法进行。整个过程如图所示:

    内存IC的逻辑模型可以用物理形态的楼房来表示,若内存为1KB,则就有1024层楼房,如图:

其中楼层号就表示地址值,这里的地址值是从上往下逐渐变大的,不过也有与之相反的。这是内存模型中的一种类型,另一种则是数据类型。在编程语言中它常表示存储的是何种类型的数据。若翻译为物理模型的楼房就指的是占有的楼层数(就是内存大小),那么接下来让我们了解一下变量的数据类型不是很容易理解,那么让我们通过一个事例来说明,如图所示:

其中char表示1字节,short表示2字节,long表示4字节,虽然赋予他们同样的数据但他们所占用的内存大小不一样,用这种方式读写数据会非常方便,因为当你想处理超过一个字节的数据时,就不必编写分割处理程序了。在C语言中,8字节(64位)的double类型最大。
   指针是C语言的重要特征,若想理解指针的关键点就要弄清楚数据类型的概念。其实指针只是一种存储着数据的内存的地址变量。若使用指针就可以对任意指定地址的数据进行读者,像Window计算机上的程序32位的内存地址,此时指针变量的长度也是32位。在我们定义指针时会在变量名前加上一个星号(*),如何从指针中读取地址呢?有下图可以明白:

    既然了解了内存,我们应该如何更好的使用它呢?在更好的使用前我们需要了解内存最直接的使用方法,那么这里,我们就要用到数组了。那到底什么是数组呢?其实数组就是指多个同样数据类型的数据在内存中连续排列的形式,而作为数组元素的各个数据会通过连续的编号被区分出来,这个编号称为索引。指定,就可以对该所火影所对应地址的内存进行读写操作。而索引和内存地址的变换工作则是由编译器自动实现的。我们还应知道数组的定义中所指定的数据类型,也表示一次能够读写的内存大小,而且数组是使用内存的基本。为了使程序更加简便,可以指定任意数据类型来定义数组。若在反复运行的循环处理中使用数组很短的代码就能达到按顺序读出,或者写入数组元素的目的,这样就会使编程工作变得更加高效。
   既然我们了解了数组,那么接下来就让我们了解数组的变形方法吧。数组的变形方法,包括栈、队列、代码清单和二叉查找树。其中栈和队列都不需要指定地址和所引来对数组的元素进行读写,因此也是相对来说使用内存时比较方便。不过两者在数据出入的顺序是有区别的,在对内存数据进行读写时,栈用的是LIFO(Last input first out,后入先出)方式,而队列用的是FIFO(First input first out ,先入先出)方式。因此,若我们在内存中预留出栈和队列所需要的空间,并确定好写入和读出的顺序就不用在指定地址和所有了。由下图我们就可知如何在程序中使用栈和队列:

       

     接下来让我们来了解一下链表和二叉查找树,首先他们都不用考虑索引的顺序就可以对数组元素进行读写,其中链表可以更加高效地对数组数据进行追加和删除处理,而二叉查找树可以更高效地对数组数据进行检索。通过下表就可以了解链表的实现过程:

         

   二叉查找树是指在链表的基础上往数组中追加元素时考虑到是数据的大小关系,要将其分成左右两个方向的表现形式。它的便利之处在于可以使数据的搜索更有效。有图可以看出为何这样说:
   

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/62018401.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

抖音评论自动回复接入智能客服系统

当有用户在抖音视频评论区发送评论后抖音会把评论内容发送给我们系统的接口我们系统拿到评论,进行关键词匹配,进行AI知识库匹配,得到回复内容我们系统调用抖音回复评论接口,将内容回复给评论者十年开发经验程序员,离职全心创业中,历时三年开发出的产品《唯一客服系统》一…

burpsuit+adb+逍遥模拟器

安卓7之后,单纯的将burpsuit的证书导出手动安装到模拟器中已经不行了,app可以只信任指定证书和系统内置的证书,后续用户安装的证书是不生效的,只能想办法装到系统内部 需要将证书通过openssl转换成pem形式,在哦通过adb将文件push到系统目录下才可绕过app的证书检测 adb下载…

翻译,师爷师爷什么叫事务!

当我们学习 apple 时候,我们很容易记住 apple 是什么。 我们也不会对 apple 的概念产生模糊混淆。 为什么? 因为字典上明确说了,apple = 苹果。 那苹果是什么? 苹果就是圆圆的红红的,吃起来甜甜的水果。 我们学习 apple 如此简单,就是因为我们对苹果这个概念的理解已经通…

项目中和兄弟部门难以高效协作?你需要注意这四点

在组织架构日益复杂的今天,靠一个人单打独斗完成工作或项目越来越难,也越来越不可能。不知你是否留意过,无论招聘什么岗位,几乎所有企业都在强调“团队合作”。 这里的团队不光指的是同部门协作,要包括公司内部的跨部门合作,甚至是跨公司与客户团队一起工作。 我们往往会…

Vulkan中的同步与缓存控制

1.Introduction Vulkan 提供显式的同步结构,允许 CPU 与 GPU 同步命令的执行。并且还可以控制 GPU 中命令的执行顺序。所有执行的 Vulkan 命令都将进入队列,并以某种未定义的顺序“不间断”执行。 有时,我们明确希望在执行新操作之前确保某些操作已完成。在编写vulkan应用时…