鱼C论坛

 找回密码
 立即注册
查看: 2986|回复: 5

关于Windows内存安排相关问题请教

[复制链接]
发表于 2016-6-16 13:55:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Windows操作系统通过切换不同的页表内容让线性地址在不同的时间片中映射不同的内容。

其中操作系统代码、数据,系统DLL等需要供每个应用程序调用,所以在所有的时间片中都必须被映射。
而用户DLL则有选择地被映射,我理解为:某个进程所在的某个时间片需要用该DLL时就映射。

紧接着罗云彬说了

由此可以引出win32编程中几个很重要的概念:
1、每个应用程序都有自己的4GB的寻址空间
2、不用应用程序的线性地址空间是隔离的
3、DLL程序没有自己“私有”的空间。它们总是被映射到其他应用程序的地址空间中,当作其他应用程序的一部分运行。

请教:
1、“1、每个应用程序都有自己的4GB的寻址空间”的意思是不是说程序可以寻址4GB,但是实际上这4GB是否全部可用存在未知数?举个极端例子,系统给应用程序可使用的内容最多为4GB,某个程序刚好要用到4GB内存,而在其前面的进程A又使用了部分内存(虽然该部分已使用的内存没被映射到此进程中,但是实际上存储了数据),这是不是说这程序就无法运行了?难道系统要强行释放前面时间片中进程A已经占用的内容数据?那这种的话又存在一个情况,当时间片又切换到进程A时,进程A的数据不就丢失了吗?
2、“3、DLL程序没有自己“私有”的空间。它们总是被映射到其他应用程序的地址空间中,当作其他应用程序的一部分运行。”
这句话是怎么理解的?是不是说被映射的DLL程序并不是一个独立进程?而永远只是独立进程的一部分?
这句话中的“总是”是什么意思?应该不是指在所有CPU的时间片吧。按前文,除了系统DLL外,每个用户DLL并不是在所有的时间片被映射,而应该是某个进程所在的某个时间片需要用该DLL时就映射。这个“总是”是不是理解为:某个用户DLL在被映射时总是.....???

请教~谢谢~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-6-16 13:57:11 | 显示全部楼层
@康小泡 @~风介~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-6-16 16:56:39 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-16 23:32:53 | 显示全部楼层

召唤大Boss!@小甲鱼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-17 11:45:22 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-6-17 16:46:20 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 06:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表