C++中的栈区堆区静态区这些是在内存的前2G部分中还是放在后2G部分中??

4G的地址空间中,前2G是进程私有的,后2G是系统共享的,这么说,每个进程实际拥有的只有2G空间而不是4G啊?如果有两个进程呢,总共是6G还是8G?如果两个进程A和B,A... 4G的地址空间中,前2G是进程私有的,后2G是系统共享的,这么说,每个进程实际拥有的只有2G空间而不是4G啊?如果有两个进程呢,总共是6G还是8G?如果两个进程A和B,A访问一个地址C,假设C这个地址是后半段的共享区内的,那么B也访问地址C,这时候A和B访问的是同一个内容吗?

我看到有这么句话 “ 系统为每个进程提供了2G的自己的虚拟地址空间,剩下的虚拟地址空间干什么用?剩下的虚拟地址空间就是给程序运行时动态分配内存使用。C++中 new的功能就是动态分配地址空间 ” 剩下的2G不是系统区不能随便访问的吗?为什么还能自己申请?
PS

用户程序要使用系统的API函数,而内存的后2G区是不是就是存放系统API函数具体的执行代码的?这样用户程序本身的代码其实只能用前2G的地址空间是吧,包括栈什么的还有用new自己申请的内存全都在前2G部分中
如果AB两个进程都访问一个地址C,而C是在后2G区的,那就是说AB两个进程访问的是同一段代码是吧?
展开
 我来答
空雪梦见
2014-03-12 · TA获得超过5598个赞
知道大有可为答主
回答量:2522
采纳率:75%
帮助的人:1211万
展开全部
你平时用的堆和栈都在前2G。
1、实际有4G。在内核模式运行的时候会使用高地址的内存(比如你调用了某个系统API,然后进入内核了,此时就会在内核地址空间运行,运行完了返回用户模式
2、每个进程的空间是独立的,两个的话从某种程度上说可以认为是4G。开启大地址支持的话每个进程可以有3G
3、Windows下访问的是同一个内容,但是内核地址空间部分是不允许用户模式的代码访问的
4、“剩下的虚拟地址空间”是指什么……4个G就分为用户空间和内核空间。动态分配也是在用户空间分配不是在内核空间分配

不是。系统API的代码也是在用户空间。系统内核代码才在内核空间。
是同一段代码。但是在用户模式下是无法访问C的,所以要做这样的实验会比较难
duyanbin68
2014-03-12 · 超过16用户采纳过TA的回答
知道答主
回答量:59
采纳率:100%
帮助的人:38.3万
展开全部

  注意,在单核CPU的中,CPU每次只能运行一个进程。所以,你说指的操作系统把4G的前面2G分配给用户程序,而后面2G操作系统使用。这4G线性空间是虚拟的,在进程切换时映射到实际的物理地址。正如你所说,每个进程拥有2G的地址空间,如果是2个进程,那么就是4G了。

 

“每个进程实际拥有的只有2G空间而不是4G啊?”

          windows把前3G的地址空间分配给了用户程序,系统占用1G的地址空间(这依然是线性地址,虚拟空间)。

 “剩下的虚拟地址空间干什么用?”

         这些剩余的地址就是操作系统使用了。C++中的new动态分配的是缓冲池中的内存,是物理内存,是要映射到用户进程的。应该在前2G中。

 
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-03-12
展开全部
至于后面的几个问题,你理解一个原则就好办了。在现在的系统中,在进程中运行的从系统中加载 .dll 是一个副本。你设想一下,如果进程崩溃了,系统会不会崩溃?A进程崩溃了,B进程会不会也崩溃?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式