系统相关
首页 > 系统相关> > C++进程空间管理

C++进程空间管理

作者:互联网

 

一、进程空间简介  ——参考博客

1.  进程空间是一个虚拟空间,是逻辑上的空间,32位系统中,进程空间共4GB。该空间中的地址通过页表映射到实际内存的物理地址,虚拟的高地址映射到物理的低地址。

2. 进程空间分为:内核空间和用户空间。虚拟内核空间则为所有进程以及内核所共享,存放内核代码、数据。

1) Windows:高位2GB给内核、低位2GB给用户。一个线程默认栈是1M,所以一个进程最大开2048个线程,实际最大线程数小于2048,大概2000个。堆空间最大为2GB。

2) Linux:高位1GB给内核、低位3GB给用户。一个线程默认8M,所以最多380个左右线程。堆空间最大为2GB。

3. 划分  ——参考博客

4. 栈空间如果不够,栈可以动态增长。如果达到了最大栈空间的大小,就会栈溢出(stack overflow),程序收到一个段错误(segmentation fault)。

 

5. 父、子进程的空间管理  ——参考博客

  父子进程各种有一份虚拟空间地址,在子进程刚被创建时,父子进程代码和数据共享,所以此时虚拟地址空间的内容是基本一样的(当然有部分数据不同,比如各子的id等),且映射关系也是一样的(即映射到相同的物理地址)。

  当如果有一方试图写入数据,那么写入方将对那份数据进行写时拷贝,虚拟地址还是没有发生变化,写入方的页表映射将改变。

 

 

标签:映射,C++,空间,2GB,线程,内核,进程
来源: https://www.cnblogs.com/grainrain/p/16611397.html