兰陵月 发表于 2016-6-16 13:55:10

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

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在被映射时总是.....???

请教~谢谢~~

兰陵月 发表于 2016-6-16 13:57:11

@康小泡 @~风介~

兰陵月 发表于 2016-6-16 16:56:39

@~风介~

~风介~ 发表于 2016-6-16 23:32:53

兰陵月 发表于 2016-6-16 16:56
@~风介~

召唤大Boss!@小甲鱼

求生而学 发表于 2016-6-17 11:45:22

{:10_278:}

兰陵月 发表于 2016-6-17 16:46:20

求生而学 发表于 2016-6-17 11:45


{:10_326:}{:10_307:}
页: [1]
查看完整版本: 关于Windows内存安排相关问题请教