内存:一种IC电子元件,常见DRAM(需要经常刷新保存数据)、SRAM(不需要刷新电路既可以保存数据),可以读取与写入,ROM(只能用来读取的内存)等形式
内存物理组成:电源、地址信号、数据信号、控制信号,用来输入输出的IC引脚
地址信号引脚数决定了内存能够表示的地址范围:表示地址范围=2^地址信号引脚数(次方)
数据信号引脚数决定了一次能够输入输出多少字节的数据(8位=1字节)输入输出数据字节数=数据信号引脚数/8(一个引脚表示一位二进制)例如:数据信号引脚数=8,8/8=1
地址信号引脚数=10,2^10=1024,因此改内存可以存储的大小为1024*1个字节=1Kb
控制信号:该信号引脚主要负责表示数据的读写
内存数据读写流程:
接入电源后进行内存读写
1.写入流程:使用地址信号引脚指定数据的存储场所把数据输入给数据信号引脚,把控制信号引脚写入信号置为1,执行完改流程数据写入内存结束2. 读取流程:使用地址信号引脚指定数据的存储场所,把控制信号引脚读取信号置为1,执行完改流程后,数据会被输出到数据信号引脚,读取结束3.禁止读写:当控制信号读、写引脚同时置0时,无法进行读写
内存的逻辑模型:内存类似楼房,在这栋楼房中,1层可以存储1字节的数据(内存为1kb 时,且有1024层),楼层号表示的就是地址
数据类型:编程语言中表示存储何种类型的数据,从内存角度看就是占用多大内存的意思
内存地址程序执行时由操作系统而定,变量的数据类型不同,所占用的内存大小也不一样低字节序:将多字节数据的低位字节存储在内存低位地址的方式成为低字节序
高字节序:将多字节数据的高位字节存储在内存低位地址的方式成为高字节序
指针:指针变量存储数据的内存地址,通过使用它可以对任意指定地址的数据进行读写,指针的数据类型,表示一次可以读写的长度
数组:多个同样数据类型的数据在内存中连续排列的形式,作为数组元素的各个数据通过连续的编号区分开,这个编号就是数组的索引
通过索引,可以实现对该索引所对应的内存地址上的数据进行读写,索引与内存地址的变换操作由编译器自动实现
由于数组与内存的物理构造一样,特别是一字节类型的数组,它与内存的物理构造完全一致,因此说数组是内存使用方法的基础,通过对数组的变形,出现了许多方便内存管理的数据结构,如、栈、队列、链表、二叉树等。
栈:读写数据时,先入后出
队列:先入先出(一般以环形缓冲区的方式实现,模型,是连接数组的头尾,使其成为一个环形进行读取)
在程序中实现栈与队列,需要以适当的元素数定义一个用来存储数据的数组,以及对该数组进行读写的函数对(入栈、出栈、入队、出队)
使用链表与二叉查找树的优势:使用链表可以对数组数据进行高效添加删除,使用二叉查找树可以高效的读数据数据进行查找
链表实现:在数组的基础上,在数组的个元素中除了数据的数值外还为其附带上下一个元素的索引,即可实现链表
二叉查找树:在链表的基础上,往数组追加数据时考虑数据的大小关系,需要追加的数数值比先前保存的数值大放右边,小放左边,因为由链表编写而来,因此追加删除同样高效