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