内存:
问题:
1.高级编程语言中的数据类型表示的是什么?
数据类型表示的是所占内存空间的大小。
2.32位环境中,指针的长度是多少位?
32位环境中,地址总线的长度就是 32 bit,也就是 4个字节的大小,而指针的值表示的就是内存的地址,所以指针的长度也是32 bit,所以指针的大小为 4个字节。
知识点整理:
1.内存的物理结构:电源引脚,地址引脚,数据引脚,控制引脚。
电源引脚:5V + 0V.
数据引脚:D0 ~ D7 一次的大小为 1 byte.
地址引脚:代表了内存的寻址能力,A0~A9 00000 00000
~ 11111 11111 则寻址能力为,则:内存存储大小为
1024*1 byte=1MB.
控制引脚:W 引脚 (write),R 引脚(read)。
2.内存的寻址过程:
接入 5V ~0V --》 CPU 将地址写入 寻址引脚,寻址,CPU将数据写入数据引脚,控制引脚 W引脚 通电,写入数据。
内存容量=寻址能力 x 写入大小.
内存的逻辑结构与数据结构的关系:
类数组方式:
内存的结构可以比作一个一个小楼房,从上到下是一个个小房子,地址从上到下依次从大到小。
1.数组:所以访问数据最快的方式是累加连续读取,即数组的方式。记录首地址(基址寄存器),不断的变换偏移(变址寄存器)值,达到快速读取的目的。
缺点:删除数据很慢,因为要把下面的数据往上移动。
2.栈:
first in,last out.
取一块大小固定的内存空间,从低向上记录,最先进栈的最后出来
应用:记录查询,回溯。
3.队列:
按照进入的顺序,挨个读出来。
类数组的结构在执行删除,和插入操作的时候,会非常慢。
链表:(方便删除和插入)
在内容的下一个空间插入指针。
程序在内存中执行。
磁盘:
问题:
1.存储程序的方式是什么?
存储在磁盘上。
2.如何通过内存提高磁盘的访问速度。
将数据先读入内存,减少CPU直接从磁盘读取数据 的时间。
3.Windows 为例,它为了节约内存用了哪些手段?
在磁盘开辟空间作为虚拟内存,共用函数,被调用方清理栈。
磁盘的物理结构:
类型:扇区(按照磁道划分),可变长。
Windows 在进行磁盘操作是 ,是以簇为单位来进行的。即使文件的大小不满足一簇,也按照一簇操作。(一簇中不能有相同的文件)
目前计算机的运算瓶颈在 磁盘。
磁盘的速度有待提高。
磁盘的发展历程:软盘 — 硬盘(HHD) — 混合(HDD)—固态(SSD)
磁盘与内存息息相关。
现代计算机:
冯.诺依曼体系(存储程式计算机)
CPU — 内存—Disk
CPU —Disk
存储数据:
1.内存:速度一般快,价格一般贵,空间数量一般多
2.磁盘:速度慢,价格便宜,空间数量多
3.寄存器:速度非常快,价格很贵,空间数量很少
一.(磁盘缓存技术)由于一开始的磁盘的速度非常慢,所以在CPU从磁盘读
取数据的同时,将磁盘数据写入内存当中,(把内存当做磁盘用)
应用:浏览器,服务端,数据库
二.(虚拟内存技术)内存不够用,将磁盘划分出一块空间作为虚拟内存。
通过置换算法,将数据一页一页的从磁盘将数据加载到内存。(pagein pageout)
应用:大多数的大型程序都是这样的。程序所需的内存
远远大于内存的空间。
节省内存的编程方式:
1.函数共用:DLL 动态链接库
2.被调用方清理栈 Windows 中的 _stdcall
节省磁盘的方式:
数据压缩:RLE算法 压缩黑白照片(传真),EXE文件.
哈夫曼算法 压缩文本文件.(采用编码的方式,
将经常出现的字符用短编码表示)
压缩:
可逆压缩(上述);
不可逆压缩(JPEG格式)