Linux进程内存分布

​ 在多任务操作系统中, 每个进程都有自己的内存沙盘, 使用的内存地址都是自己内存中的相对地址,当CPU时间片轮转到的时候, 操作系统将对应进程的内存页调入寄存器, 进程开始运行。因此不同进程间的内存地址是没有关联的, 都是自己的相对地址。

内存分布图

在这里插入图片描述

这个图是32位机器的, 2 32 = 4 G B 2^{32} = 4GB 232=4GB, 64位机器就有点大了, ( 4 G B ) 2 (4GB)^2 (4GB)2 额…… 反正你用不到这么大就行了。 分配比例差不多吧, 不是很了解。

概要:

这图上部是高地址, 最下面是0, 共分为两部分, 内核区和用户区

内核区:

内核区不允许用户代码访问, 只要访问就会出现段错误, 内核区主要有PCB(进程控制块), 保存进程运行的信息

栈区:

保存的内容:

  • 函数内定义的局部变量(非static)

  • 中断发生时存放的运行环境

用户区第一块区域,当函数结束时, 局部变量自动销毁, 内存自动释放, 因此这部分内存不需要程序员自己管理
  增长方向为向下增长(向减小的方向增长), 与堆区相反。

内存映射区:

这里保存动态链接库, 地址在栈区和堆区之间。

堆区:

这里保存用户自己申请的内存, 这部分内存需要用户自己释放, 例如new申请的内存要用delete释放, 同理malloc 与 free。

.bss 未初始化全局变量区

此处保存全局变量和静态变量

.data 已初始化全局变量区

同上, 只是这里保存的是已初始化的

.text

程序代码, 即CPU可执行的二进制代码, 不是C或C++等代码

常量: 如const 和 1 、 ”helloword“等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值