望高手解答Windows的应用程序内存管理??????

来源:百度知道 编辑:UC知道 时间:2024/06/10 01:30:51
一直没有搞清Windows的内存管理望高手解答,问题如下.
比如现在机器上有256M的内存,程序有4G大是一个单文件。
这样的程序能运行吗????
如果能运行他是将所有程序的代码加载到内存中,不够的用硬盘交换。还是用其他方法,比如加载是只加载一部分代码,需要其它代码在加载。

注:4G程序是实体机代码,非虚拟机代码(java,.net)

关于操作系统对内存的管理,上面二位已经说得很清楚。但另外还要说的是,一个程序存在磁盘上的大小和它运行时占用内存的大小并不成正比关系。一般说来,一个程序包含的指令越多,它在磁盘上占用的空间越大,但它运行占的内存不一定大。例如,几行代码就可以吃尽你的内存,double a[10000000][1000000][100000],当然这是不可行的,只是举个容易明白的例子。再如利用内存绘图把位图弄得很大等等。相反的例子,你一大堆代码,可能之占用很少的内存,如类似反复动态申请内存再删除再申请的p = new class()
delete p;
等等
你这样的代码无论执行多少此,内存占用不会增加,但指令会大大增加。

比如现在机器上有256M的内存,程序有4G大是一个单文件。
这样的程序能运行吗???? 可以的。
内存只是用来数据交换的。
无论单文件多大,在物理上来说,它只不过是一些通断的代码。

内存工作原理
1.内存寻址
首先,内存从CPU获得查找某个数据的指令,然后再找出存取资料的位置时(这个动作称为“寻址”),它先定出横坐标(也就是“列地址”)再定出纵坐标(也就是“行地址”),这就好像在地图上画个十字标记一样,非常准确地定出这个地方。对于电脑系统而言,找出这个地方时还必须确定是否位置正确,因此电脑还必须判读该地址的信号,横坐标有横坐标的信号(也就是RAS信号,Row Address Strobe)纵坐标有纵坐标的信号(也就是CAS信号,Column Address Strobe),最后再进行读或写的动作。因此,内存在读写时至少必须有五个步骤:分别是画个十字(内有定地址两个操作以及判读地址两个信号,共四个操作)以及或读或写的操作,才能完成内存的存取操作。

2.内存传输
为了储存资料,或者是从内存内部读取资料,CPU都会为这些读取或写入的资料编上地址(也就是我们所说的十字寻址方式),这个时候,CPU会通过地址总线(Address Bus)将地址送到内存,然后数据总线(Data Bus)就会把对应的正确数据送往微处理器,传回去给CPU使用。

3.存取时间
所谓存取时间,指的是CPU读