进程的内存空间划分(详解)

从低地址 到 高地址:
一共 4G 运行内存。

  1. 在windows 中: 一般内核空间2G,用户空间(除了内核空间)2G。
  2. Linux中:一般内核空间 1G,用户空间3G。
    在这里插入图片描述

代码区:

----------有时也叫文本段,通常指的是用来存放程序执行代码包含类成员函数和全局函数及其他函数代码),只需要有一份即可。再直白一点 就是 CPU执行的 机器指令。
-----------其中包括了 指令的操作码和操作对象(或对象地址引用)。如果是立即数(及具体的数值,如6),直接包含在 代码中。如果是栈中的数据,.bss区,.data区,则是 引用该数据的地址。
----------这部分区域的大小在程序运行前就已经确定,并且是共享的(其他执行程序可以调用它)。
----------代码区通常是只读的,原因是防止 意外的修改了其指令。


全局变量区

全局变量区 又分为两块 :.bss 和 .data。其中存储的是由静态分配(静态持续性)的变量: 全局变量,静态变量。在 程序运行之初就申请了内存,生命周期为 整个程序运行过程,由系统自动释放。

.data(数据段)

----------已初始化的全局变量或者静态数据的一块内存区域。。

.bss(Block Started by Symbol)

----------通常指的是存放程序中未初始化或者初始化为0全局变量的和静态数据的区域。程序结束后静态资源变量由系统自动释放。
---------其中的数据在 程序开始执行之前被 内核初始为 0 或者空指针。


堆区

---------由用户动态分配, 由 用户自己释放,若不释放,会造成运行时的内存泄露。
--------- 不连续虚拟内存区域,系统用链表来管理堆区空间。
----------请求的 内存 是由 地址到高地址的。(向上申请内存)

栈区

----------存放程序临时创建的局部变量,不包括static声明的变量,static意味着在数据段中存放。
----------除此之外,当函数被调用时,其参数也会被压到栈中,并在调用结束后,函数的返回值也会被放到栈中。
---------连续的物理内存空间。在win中,每个线程的栈大小默认是 1M,Linux中,默认是8M。
----------请求的 内存 是由 高地址到低地址的。(向下申请内存)
----------register 关键字建议编译器用 CPU寄存器存储的变量(C++11之前)
注:当堆区 数据地址 和 栈区数据地址相同时(碰面了) 就代表,数据已用完。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值