windows进程创建时内存分配问题

newric 发布于 2014/07/25 19:10
阅读 265
收藏 0

第4步里的这句话好像有点没看懂,如果为空就不创建新地址空间了?win32下不是进程的地址空间都是隔离开的么?每个进程应该都独享4G的虚拟地址空间才对呀
请问这是怎么回事?

加载中
1
自由之信
自由之信

Windows 不是很清楚,不过对于 Linux 而言,如果你fork一个process,然后,这个process其实是共享了父process的地址空间(就是地址指针指向同一个地址空间),简单的说,就是共享的(但是代码是可以按照fork的结果分离的),但是如果,子process需要载入一个可执行命令,则空间会创建新的..上面的说法有点费解,好像Windows并没有fork的机制,所以总是创建一个新的地址空间,这里的父process不为空,可能是说父process有效的意思,和Linux的不一样

自由之信
自由之信
回复 @Lance_Ric : VM = Virtual Memory,抱歉,我是说,4G是虚拟空间,3G指向的是自己的物理空间,还有1G指向的是内核的物理空间,而内核只有一份,所以是共享的。
newric
newric
嗯,3g是打开了内核启动开关吧.还有您指的VM我好想没看懂,从linux中fork的解释我懂了,不过windows里的具体分配情况还是不太清楚,不过还是谢谢了
自由之信
自由之信
回复 @Lance_Ric : 所谓的独享4G,其实还是共享,其中3G是自己的用户空间,1G内核空间是共享的,是有自己的VM,但是物理空间是一样的,我说共享,实说物理空间
自由之信
自由之信
回复 @Lance_Ric : 我不知道Windows的内核实现,但是WIndows的API创建process,都是从一个外部exe开始的(对么?),从这个角度而言,是要分配全新空间(或者共享那个exe所在的code空间),也有一种写拷贝技术,就是当一个地址被写的时候,才创建一个新的物理空间,之前大家都是共享虚拟空间的
newric
newric
哦,您的意思也就是说如果在windows中创建进程,新进程不管有没有父进程,都会为其分配4g单独的虚拟地址空间对吧
返回顶部
顶部