1.程序被打开时,即程序开始运行时,会首先向 *** 作系统请求独占内存空间(一段在程序整个执行过程中都不释放的空间), *** 作系统会应答请求并分配一段逻辑上连续(其实是将零散的内存空间映射为一段连续的空间)的内存空间给该程序,此时程序得到该段空间的逻辑地址信息,根据地址将程序代码段和数据段装入内存,此时程序载入完成。
2.程序运行中,当某一过程任务需要更大内存空间时,会再次向 *** 作系统发出请求, *** 作系统会根据请求再次分配内存空间给该程序,当这一过程任务执行完毕后,该内存空间被释放。同时由于 *** 作系统的存储保护,程序在运行过程中只能访问自己所申请的内存空间,不能访问其他程序的内存空间。
3.当程序执行完毕或关闭程序后,该程序所占的所有内存空间都被释放。
当你再次打开程序后,重复上面的过程。
下面对你的问题进行针对性回答:
1.当程序运行时,会调入内存,不同时间运行,程序放在内存的位置也可能不同:每运行一次程序,程序都会重新向 *** 作系统申请内存空间,这时 *** 作系统会分配一段全新的内存空间给程序,故不同时间运行程序,程序在内存中的位置是不同的。
2.使用内存中数据的位置也可能不同:当程序申请内存空间后, *** 作系统会将所申请的内存空间的地址传给程序,尽管数据的位置不同,但程序知道数据的地址,故程序依然可以根据地址来找到所需要的数据。
您好,用户在运行程序前, *** 作系统并不是将程序装入哪个盘,而是将程序装载入内存中,磁盘只是用来存放数据,而不是用来运行程序的,所有的程序都在内存中进行,所以内存的大小很大程度上决定了系统同时运行程序的多少,希望我的回答对你有帮助,如还有疑问请提出,谢谢不知道你看不看得懂1、 编辑阶段利用计算机提供的编辑程序,入UNIX中的vi,将用户编好的程序输入到计算机内。生成源程序文件,如:file1.c。
2、 编译阶段
把源程序经过翻译或汇编处理,生成目标代码。编译过程即把高级语言翻译成计算机理解的低级语言。目标代码文件为file1.o。
3、 连接阶段
将编译后得到的一组目标模块以及它们所需的库函数装配成一个完整的装入模块。
4、 装入阶段
将装入模块放入分到的内存区中。这时需要进行重定位,即将装入模块的逻辑地址转变为内存的实际物理地址。
5、 运行阶段
运行可执行的程序file1.exe。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)