本章前面有几个问题:
1、存储程序方式指的是什么?
2、通过使用内存来提高磁盘访问速度的的机制称为什么?
3、把磁盘的一部分作为假象内存来使用的机制称为什么?
4、Windows中,咱程序运行时,存储着可以动态加载调用的函数和数据的文件称为什么?
5、在EXE程序文件中,静态加载函数的方式称为什么?
6、在Windows计算机中,一半磁盘的一个扇区是多少字节?
解析:
1、在存储装置中盘存程序,并逐一运行的的方式。现在计算机采用的是存储程序方式
2、Disk Cache(磁盘缓存)。磁盘缓存是指把从磁盘中读出的数据存储在内存中,当该数据再次被读取时,不是从磁盘而是从内存中高速读取。
3、虚拟内存。记住虚拟内存,脑癌是内存容量不足的计算机,也可以运行很大的程序。
4、DLL文件。DLL是Dynamic Link Liabrary 的略称。
5、静态链接。函数的加载方式有静态链接和动态链接两种。
6、512字节。扇区是磁盘保存数据的物理单位。
在计算机中程序保存在存储设备中,通过有序的被读出来实现运行,这被称为存储程序方式(程序内置方式)。在此之前程序是通过改变计算机的布线等来变更程序的。因为磁盘中存储的程序是无法直接运行的,必须在接再到内存之后才能运行。因为CPU只用通过计数器来指定内存地址才能在内存中读出数据,如果直接从磁盘中读取数据,因为磁盘的读取速度慢,所以程序运行速度会极大降低
我们知道磁盘读写速度慢,因此引入了缓存,磁盘将将要运行的程序存入缓存中,CPU直接从缓存中读取数据,由此大大提高了磁盘的访问速度
因为内存一般都极其有限,所以提出来虚拟内存。虚拟内存是计算机系统中的一种技术,通过它,操作系统可以使用磁盘空间来扩展计算机的主内存。当主内存不足以容纳当前所有需要执行的程序或进程时,部分内容会被暂时保存到磁盘上,从而腾出空间给其他程序继续运行。虚拟内存使得每个程序都能够获得足够的内存空间,提高了系统的稳定性和多任务处理能力。
实际上正在运行的程序在这个时间点上是必须在内存中的,也就是说,为实现虚拟内存,必须把实际内存的内容,和磁盘上的洗你内存的内容进行部分置换,,并且同时运行内存。虚拟内存分为分页式和分段式。windows采用的是分页式,指的是在不考虑程序构造的情况下,把运行的程序按照一定大小的也进行分割,并一页为单位在内存和磁盘间进行置换。在分页式中读出page in,写入称为page out ,一般Windows的页大小为4KB,即将大程序页4KB的页来切分,以页为单位放入内存或虚拟内存中。
既然虚拟内存的出现是因为内存的有限,那么怎么节约内存?
1.通过DLL文件实现函数共有:DLL文件实在程序运行时可以动态加载Library(函数和数据的集合)的文件。多个应用共有一个DLL文件就达到了节约内存的目的。(Windows本身也是多个DLL文件的集合体,在安装新应用时,DLL文件将会被追加,应用利用直接DLL文件来运行)。DLL文件还有一个优点:在不变更EXE文件的情况下,只通过升级DLL文件就可以完成更新。
2.通过调用_stdcall 来减小程序文件的大小:此方法是C语言编写应用是利用的高级技巧。
_stdcall 是一种调用约定(calling convention),它规定了函数的参数传递方式以及函数内部清理堆栈的方式。在 _stdcall 调用约定中,函数的参数是从右向左依次入栈,由调用者负责清理堆栈上的参数。这意味着被调用函数在返回时会自行清理堆栈,而不是由调用者来清理。
在 Windows 平台上,C 和 C++ 编译器默认使用 _stdcall 调用约定,因此在 Windows API 中经常会看到使用 _stdcall 修饰的函数声明。这种调用约定也被广泛应用于 Win32 API 编程以及基于 Windows 的 C/C++ 开发中。
总之,_stdcall 是一种函数调用约定,用于规定函数参数传递和堆栈清理的规则,并在 Windows 平台的编程中扮演着重要的角色。