注册 登录
编程论坛 汇编论坛

到底是怎么理解每个进程有独立都4G内存空间

wobianlong 发布于 2012-09-02 14:27, 1140 次点击
常常听见说系统每个进程都有独立都4G内存空间
这个4G内存又分为2个2G,其中2G是所有进程共享都2G,另外2G是进程都私有空间
每个进程又有各自不同都映射表
那么我都问题是就算每个进程给2G私有空间好了,系统那么多进程 内存怎么够分呢,假设算上了虚拟内存也完全不够分啊?
每个进程给2G那么20个进程不是就要40G了,
迷惑了很久都问题了
7 回复
#2
TonyDeng2012-09-02 14:32
那个2G私有的是逻辑空间,并非有真实内存对应,而是操作系统按需要映射切换的。另外那个共享的2G其实就是Windows的类代码和管理空间,所有基于Windows运行的进程都是使用这同一份内存的。
#3
zklhp2012-09-02 14:43
以下是引用wobianlong在2012-9-2 14:27:37的发言:

常常听见说系统每个进程都有独立都4G内存空间
这个4G内存又分为2个2G,其中2G是所有进程共享都2G,另外2G是进程都私有空间
每个进程又有各自不同都映射表
那么我都问题是就算每个进程给2G私有空间好了,系统那么多进程 内存怎么够分呢,假设算上了虚拟内存也完全不够分啊?
每个进程给2G那么20个进程不是就要40G了,
迷惑了很久都问题了

你疑惑的可能主要是 每个进程都有4G 加起来不就很大了么

其实这里的4G就好像一个本子 本子上能记100个人的名字 这个【100】是本子的上限 但本子实际上的人的数量可不一定有这么多啊

不同进程都有4G就好像不同的老师 每人手里都拿一个本子记名字 这些本子上限都是100 但可能记的人总共只有那么100个 甚至可能更少 10个 这也无所谓啊

内存分配好像是4k一个页 貌似这就是分配的最小单元了 也就相当于一个人
#4
wobianlong2012-09-02 15:27
回复 3楼 zklhp
就是说最大可以给你分配2G私有地址?但是不一定分配给你?
假设要运行2个超级占内存都软件 每个占2G会如何是好
#5
zklhp2012-09-02 15:44
以下是引用wobianlong在2012-9-2 15:27:25的发言:

就是说最大可以给你分配2G私有地址?但是不一定分配给你?
假设要运行2个超级占内存都软件 每个占2G会如何是好

那第二个肯定申请不到内存 一般是出错退出 如果是没设置虚拟内存或虚拟内存小

如果设置了足够大 那运行第二个的时候 第一个占用的物理内存就存到硬盘上 这时硬盘会响 让第二个程序能运行

哦 如果是一块呢 呵呵 搞不好都退出都运行不了
#6
pangding2012-09-02 17:36
虚拟地址再多也不会占用实际的内存。只有申请了并实际分配了的内存,才是进程实际占用的内存。
如果实际内存不够用了,申请就会失败。分配失败的错误,一般需要那个进程自己解决,比如想办法削减开支。不过有时需要申请的内存都是必要的内存,拿不着,没有其它办法,只好出错退出。
虚拟内存就是分出部分硬盘来当内存,操作系统负责在硬盘和内存之前搬运信息,进程不用操心。只是一但要用到硬盘的话,可能就会大幅减缓程序的运行速度。
#7
zklhp2012-09-02 17:38
楼主每次结题都很快 这点我很喜欢
#8
pangding2012-09-02 17:55
回复 7楼 zklhp
不蹲点的人永远不能多拿分……
1