内存的分类:
ROM:只读内存
RAM:可读取和写入的内存,里面的数据断电即消。
RAM又分为:DRAM(不需要经常刷新)和SRAM(需要经常刷新)
内存大小是如何计算的?
假设一个内存的地址引脚一共有10个则它的寻址范围为0000000000~111111111,也就是它能够索引的地址共有1024个;假设它的数据引脚有8个则一次读取或写入的数据为8bit(位)=1byte(字节);那么这块内存的容量大小也就是1024*1byte=1kb;
因此得出:内存大小=内存的寻址范围*一次读取或写入的数据量
为什么数组内的元素写入和读取速度比链表快,而增删操作效率却比链表低?
数组内的元素写入和读取速度比链表快是因为:
读写数组中的某个元素时不用对cpu基址寄存器进行重新赋值。因为数组在内存中是存储在一块连续的内存中的,而链表的各个节点并没有要求在一块连续的内存中,所以每次访问节点都要对cpu基址寄存器重新赋值。
2.数组带有顺序的下标,又是存储在一块连续的内存中的,所以通过数组首地址和下标可以很容易计算出内存地址,(而链表则需要从头一个个遍历节点)比如char
a[5]各元素在内存中的分布状况
因为这里是字符数组每个元素占一个字节所以所以:
a[n 2]的地址=a[n]的地址 2*1(要换成二进制)
对数组内的元素进行增删操作效率比链表低是因为:
数组元素存储在一块连续的内存中是它的优点也是它的缺点,这样的存储方式造成了如果我们在数组中间插入或删除一个数就会造成牵一发而动身。
如图所示如果在数组元素中间插入一个字符3,那么为了给插入的元素腾出空间,字符4,5,6必须都移到它们后一个元素所在的内存;同理如果删除数组中间的一个元素,为了保持数组元素在内存中的连续性必须将所删除元素后面的元素全部移到它们前一个元素所在的内存。这就增加了大量的计算量。而对于链表来说只需要把所操作节点前后的两个节点的指针重定向即可。