程序员主要和内存打交道
内存的物理结构
ROM:只能读取 ,早期的手机操作系统放在ROM中
RAM:能够读取和写入, DRAM(经常更新) SRAM(不经常更新) ,里面的数据断电即消
内存中把引脚分为: 电源 、地址 (决定寻址能力、)数据 、控制 四大类
例如一个芯片有:A0到A9 10个地址引脚 ,可以表示 1024个地址
D0到D7 8个数据引脚, 能接受8个数据信号,一次可以输出或输入的数据量 , 8bit= 1byte
当前芯片的容量是 1024×1 byte =1KB 能存储1kb的数据
往内存写数据
首先给芯片两边分别接入5V,0V的电压,如果当前的地址是0001111000,通过它找到芯片当中指定的位置,找到指定的存储场合,然后再将我们的电流信号写入数据引脚 (比如是00001111),(1的位置接高电平)再给WR置1 指定的地址就会写入指定的值.
所以写内存必须按照一定的格式写。
内存的逻辑结构
把内存比如一间间存储数据的楼房,通过地址引脚,每个楼房都有楼层和门牌号。 每层都有编号,就是地址。每个楼层的大小由数据引脚来决定的。
char = 1 byte 一层能放下
int = 4 byte 把四层打包成一层,取首楼层地址(比如 0011),楼层的编号还是存在的
为什么 数组的访问数据最快
内存地址都是从上往下累加的,累加一步步来, 数组存一个连续的数据 ,取的时候只需要拿到首地址,然后依次挨个往后取。这种架构非常符合内存的结果, 操作效率非常高,按照当前整个数据的模式来依次找,当需要访问或删除里面数据,只要取到首地址,通过首地址来进行偏移,只需要取一次数据。
为什么 要提出栈和队列
如果要删除其中一个数据,CPU首先寻找到首地址,偏移到删除位置,删掉。然后把其他数据往前移。就会很慢。因此设计了其他数据结构。
栈: 用于数据记录 FILO 先进后出 入栈 出栈
队列 : 按照进去的顺序挨个拖出来
链表 : 存储了数据和指针(数据地址) ,通知指针指向找到下一个值,方便删除,只需要改指针指向的地 址。