内存是一种名为内存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 ,先入先出)方式。因此,若我们在内存中预留出栈和队列所需要的空间,并确定好写入和读出的顺序就不用在指定地址和所有了。由下图我们就可知如何在程序中使用栈和队列:
接下来让我们来了解一下链表和二叉查找树,首先他们都不用考虑索引的顺序就可以对数组元素进行读写,其中链表可以更加高效地对数组数据进行追加和删除处理,而二叉查找树可以更高效地对数组数据进行检索。通过下表就可以了解链表的实现过程:
二叉查找树是指在链表的基础上往数组中追加元素时考虑到是数据的大小关系,要将其分成左右两个方向的表现形式。它的便利之处在于可以使数据的搜索更有效。有图可以看出为何这样说:
标签:引脚,数据,地址,有棱有角,内存,数组,IC,熟练 From: https://www.cnblogs.com/G-y-l-123/p/18020093