进程的内存空间

进程的内存空间

每个进程所分配的内存由很多部分组成:

  • 代码区
    包含了进程运行的程序机器语言指令。代码段一般是只读的,以防止进程意外修改自身指令。因为多个进程可同时运行同一程序,所以又将代码段设为共享,这样,一份程序代码的拷贝可以映射到所有这些进程的虚拟地址空间中。

  • 初始化数据段
    也称数据段,包含初始化的全局变量和静态变量。当程序加载到内存时,从可执行文件中读取这些变量的值。

  • 未初始化数据段
    此段常被称为BSS段,包含未进行初始化的全局变量和静态变量。程序启动之前,系统将本段内所有内存初始化为0。
    (在 C++中,已经不再严格区分bss和data了,它们共享一块内存区域)


  • 一般由程序员分配释放,不连续的虚拟内存,区别于数据结构中的堆。


  • 由编译器自动分配释放,连续的物理内存,存放函数的参数值,局部变量等,其操作方式类似于数据结构中的栈。

从高地址到低地址:
在这里插入图片描述

区分内核空间和用户空间的原因:

  • 操作系统的数据都是存放于内核空间的,用户进程的数据是存放于用户空间的;
  • 分开来存放,就让系统的数据和用户的数据互不干扰,防止用户程序误操作或者恶意破坏系统,保证系统的稳定性,并且管理较方便。
int a = 0; //全局初始化区  
char *p1; //全局未初始化区 

int Sum(int a, int b){
    return a+b; //栈
}
int main()  
{  
	int b; //栈  
	char s[] = "abc"; //栈  
	char *p2; //栈  
	char *p3 = "123456"; //123456\0在常量区(全局区),p3在栈上。  
	static int c =0; //全局初始化区  
	p1 = new char[10];  //分配得来的10字节的区域在堆区  
}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值