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

C++进程空间管理

时间:2022-08-21 23:34:04浏览次数:140  
标签:映射 C++ 空间 2GB 线程 内核 进程

 

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

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

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

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

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

3. 划分  ——参考博客

  • 程序段(Text):程序代码在内存中的映射,存放函数体的二进制代码和只读常量。
  • 数据段:静态数据(①Data段(初始化过的数据)和②BSS段(未初始化的数据))、全局数据
  • 栈 (Stack):存储局部、临时变量,函数调用时,存储函数的参数列表、返回指针,用于控制函数的调用和返回。在程序块开始时自动分配内存,结束时自动释放内存,其操作方式类似于数据结构中的栈。
  • 堆 (Heap):存储动态内存分配,需要程序员手工分配,手工释放。存储那些生存期与函数调用无关的数据。

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

 

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

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

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

 

 

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

相关文章

  • c++ RTTI Runtime Type Identification 运行阶段类型识别
    NoVirtualBase*NvirBase=newNovirtualDerivd();NvirBase->print();//autond1=dynamic_cast<NovirtualDerivd*>(NvirBase);//必须有虚方法auton......
  • C++反序列化--一种基于class infomation反射库的反序列化数据结构
    序列化与反序列化概念:将程序的某些数据存储在内存中,然后将其写入某个文件或是将它传输到网络中的另一台计算机上以实现通讯。这个将程序数据转化成能被存储并传输的格式的......
  • 【C++】 基本知识点
     strcmp()函数用法及其详解原型:intstrcmp(constchar*s1,constchar*s2);头文件:#include<string.h>功能:用来比较两个字符串参数:s1、s2为两个进行比较的字符串,......
  • c++ 友元类 友元类方法
    一、友元类#pragmaonce#include"Tv.h"classRemote{public:voidchanDown(Tv&tv);};#pragmaonceclassTv{public:friendclassRemote;voidchandown......
  • C++指针
    两种声明方式int*p=newint;*p=1000;inta=1000;int*p=&a;数组名和指针的区别指针的值可以修改,数组名是常量。pointerName=pointerName+1;//v......
  • C++之vector
     一、标准库函数1.构造数组——参考博客一维数组构造://构造一维数组vector<int>vec(n);//n为vec长度,默认所有值为0vector<int>vec(n,1);......
  • 360se_getdbkey_c++
    关联:360安全浏览器历史记录、收藏夹  下载链接:https://files.cnblogs.com/files/DirWang/360se_getdbkey.zip?t=1661006095......
  • c++ lambda学习举例
    #include<iostream>#include<vector>#include<algorithm>#include<cmath>#include<ctime>usingstd::cout;usingstd::vector;usingstd::srand;usingstd::time......
  • 通过supervisor管理laravel队列任务守护进程
    通过supervisor管理laravel队列任务守护进程背景:laravel队列,在调试使用时可以使用phpartisanqueue:work来启用队列,但是实际项目部署后,需要通过守护进程一直启动队列,在这......
  • C++数据类型
    整型C++标准short:>=2字节int:>=shortlong:>=4字节,>=intlonglong:>=8字节,>=longlinux系统short:2字节int:4字节long:4字节longlong:8字节int被设置为计算机......