win32内存管理是平坦模式,总是认为有4G内存。
低地址的2G是每个进程用,高地址的2G是系统用。
这个说法对么?还有,是否打开一个进程就分配一段内存给该进程呢?
例如我打开IE,就运行了一个iexplorer.exe进程。再打开一个IE网页,任务管理器里就有2个iexplorer.exe进程了。
难道这时候内存里这个进程运行了两份,占了两段内存么?请明白windows机制的朋友给具体讲讲程序运行时具体内存分配的样子,谢谢了。另外,有哪些书是讲windows具体运行机制这方面东西的呢?

解决方案 »

  1.   

    Windows核心编程    
      

  2.   

    能给具体讲下不?最好举个例子。我是看hInstance这句柄时想到的。IE开两个窗口,是两个单独的进程呢?还是一个进程,两个instance呢?任务管理器里是显示两个iexplorer.exe进程。
      

  3.   

    一个进程  就是一个4G的内存  
    但是为了提升效率  可能有很多数据都是共享的  
    自己可以搜搜Windows著名的Copy-on-Write  机制    
      

  4.   

    最好自己下载一个Windows核心编程看看   里面的内存管理一章讲的很清楚 
      

  5.   

    一个进程创建时,windows给他分配4G的虚拟内存(这4G一部分映射到真正的物理内存,一部分到文件,一部分为空)
    进程分为独立和共享两各,iexplorer.exe是独立的里程,打开一个ie就创建一个
    像svchost就是共享的
      

  6.   

    进程不同,内存空间所占不同。但有共享的DLL等库。建议学学PE结构。
      

  7.   

    win32内存管理是平坦模式,总是认为有4G内存。 
    低地址的2G是每个进程用,高地址的2G是系统用。 
    这个说法对么? 
    =========================================
    在Win32下可以理解用户2GB, 系统2GB, 但没想象的这么简单, 
    其中又分出多个部分, 还可以申请3GB user-mode, 
    具体的你可以看windows核心编程.
    还有,是否打开一个进程就分配一段内存给该进程呢? 
    例如我打开IE,就运行了一个iexplorer.exe进程。再打开一个IE网页,任务管理器里就有2个iexplorer.exe进程了。 
    难道这时候内存里这个进程运行了两份,占了两段内存么? 
    ===============================================
    这个问题是这样的, 对于私有数据, 每个进程都有属于自己那份, 
    但是共享的数据, 比如DLL, 在进程角度确实是各持1份, 事实上
    系统里只有一份, 只不过被映射到不同的进程.
    这就好比类的数据成员和函数成员, 数据是私有多份, 而函数只有1份.最后我要强调, 进程地址空间不等于实际物理内存, 否则1GB内存连1个程序都无法运行.
    其中涉及存储器管理, 页面交换等保护模式技术, 这方面想彻底弄清了, 免不了学学汇编.
      

  8.   

    《Windows核心编程》 网上找得到的