四区和五区

C/C++把内存分为:栈区、堆区、全局区(静态区)、常量区、代码区

C/C++中的内存分为四个区域,分别是:

1. 栈区(Stack):由编译器自动分配和释放,存放函数的参数值、局部变量的值等。栈是一种先进后出的数据结构。

2. 堆区(Heap):由程序员手动分配和释放,当程序运行时,需要动态分配内存的数据就存在堆区。堆是一种无序的数据结构。

3. 全局区(静态区)(Static/Data):存放全局变量、静态变量、常量和字符串等,程序运行期间一直存在,程序结束后自动释放。

4. 代码区(Text):存放函数体的二进制代码。

此外,C++中还有一个新的区域,称为“五区”:

5. 常量区(Const):存放常量,包括全局常量和局部常量。常量区是和代码区分开的,常量区是只读的,不能修改。

c语言的四区只是将常量区和全局区合在一起称为数据区。

栈区

栈区主要存放局部变量、函数调用参数等栈区由编译器自动分配和释放栈属于 计算机系统的数据结构,进栈出栈有相应的计算机指令支持,而且分配专门的寄存器 存储栈的地址,效率分高,内存空间是连续的,但栈的内存空间有限。

先存高低值后存低地址,另外一提,数组的存储地址随下标增大而增大,因此如果在栈区定义一个变量之后定义数组可能会引起数组越界,这个情况不会报错因此会出现许多奇怪的错误。

堆区

使用malloc()/new()申请的内容存储在堆区

堆区由程序员手动分配,因此需要自己释放,如果不释放就会产生内存的泄漏

内存空 间几乎没有限制,内存空间不连续,因此会产生内存碎片。操作系统有一个记录空间 内存的链表,当收到内存申请时遍历链表,找到第一个空间大于申请空间的堆节点, 将该节点分配给程序,并将该节点从链表中删除。一般,系统会在该内存空间的首地 址处记录本次分配的内存大小,用于 delete 释放该内存空间。

使用完一定要释放空间,否则会内存溢出。

全局区

全局区分为两个段:

DATA段:存储初始化的全局变量、

初始化的静态变量BSS段:存储未初始化的全局变量、未初始化的静态变量其中BSS段会在程序执行前

将内容全部置为0,所以未初始化的全局变量和未初始化的静态变量的值都为0

在许多编程语言中,全局变量的默认值是根据其数据类型而定的。以下是一些常见的默认值:

- 数字数据类型(整数、浮点数等):默认值为 0 或 0.0。
- 布尔数据类型:默认值为 false。
- 字符串数据类型:默认值为空字符串 ""。
- 数组和列表数据类型:默认值为一个空数组或空列表 []。
- 对象和类数据类型:默认值为 null 或 undefined,具体取决于编程语言的实现。

需要注意的是,在某些编程语言中,全局变量的默认值也可以被程序员指定或修改。

常量区

存放常量,而且不允许修改。

程序结束之后由系统释放。

里面存的数据只读不可改,如果是c++中const修饰的全局变量,可以用mutable击穿。

代码区

主要存放程序中的代码(二进制),属性是只读

进程的内存分配,四区和五区相关推荐

  1. mac下chrome浏览器的标签页、进程和内存分配

    因为最近要解决网页经常崩溃的问题,所以去研究了一下chrome浏览器的标签页和进程的关系,以及标签页对应进程的内存分配. 标签页和进程的对应关系 当chrome浏览器开启但是没有任何一个标签页的时候, ...

  2. 【C 语言】内存管理 ( 动态内存分配 | 栈 | 堆 | 静态存储区 | 内存布局 | 野指针 )

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  3. 怀旧服一区和五区服务器位置,魔兽怀旧服战场分组怎么看?怀旧服战场分组一区五区怎么分的?...

    魔兽怀旧服战场分组怎么看?怀旧服战场分组一区五区怎么分的? 2019-12-20 10:20 作者:我游网 来源:本站整理 浏览:5776 魔兽怀旧服战场分组怎么看?怀旧服战场分组一区五区怎么分的?最 ...

  4. linux c语言 glibc 错误 munmap,Linux内存分配小结--malloc、brk、mmap

    Linux的虚拟内存管理有几个关键概念: 1.每个进程都有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址: 2.虚拟地址可通过每个进程上的页表(在每个进程的内核虚拟空间地址)与物理地址进行 ...

  5. 【Linux】内存分配小结--malloc、brk、mmap

    原文:https://blog.csdn.net/gfgdsg/article/details/42709943 http://blog.163.com/xychenbaihu@yeah/blog/s ...

  6. linux内存管理策略,Glibc内存管理—ptmalloc内存分配策略(1)

    一.linux的内存布局 1.32位模式下内存的经典布局​ 图1 32位模式下内存经典布局 ​ 注:这种内存布局模式是linux内核2.6.7以前的默认内存布局形式 说明:(1)在32的机器上,lo ...

  7. C语言第十三课,动态内存分配

    动态内存分配的空间放在堆区.动态内存函数主要有:malloc,calloc,realloc 动态内存函数的介绍 malloc 申请一个空间,大小是size的大小,指向的一个类型不明,因为在设计的时候, ...

  8. brk函数 linux,brk和sbrk及内存分配函数相关-linux+内存

    brk和sbrk主要的工作是实现虚拟内存到内存的映射.在GNUC中,内存分配是这样的: 每个进程可访问的虚拟内存空间为3G,但在程序编译时,不可能也没必要为程序分配这么大的空间,只分配并不大的数据段空 ...

  9. Linux创建线程时 内存分配的那些事

    文章目录 问题描述 问题分析 针对问题1 的猜测: 针对问题2 的猜测: 原理追踪 总结 问题描述 事情开始于一段内存问题,通过gperf工具抓取进程运行过程中的内存占用情况. 分析结果时发现一个有趣 ...

最新文章

  1. 没想到图像直方图有这么多应用场景
  2. LNOI2014 LCA
  3. 【风险管理】风控一二三
  4. 操作系统——CPU、计算机的构成
  5. mysql 使用正则表达式查询
  6. react复制内容到剪贴板
  7. Sales area data model research in QDD
  8. web框架之Django(一)
  9. 一篇关于Qt开发技巧的文章收藏
  10. 用idea建立jsp项目_用idea创建maven项目,配置tomcat详解
  11. 一些自成系统、完备的教程(链接、博客、github等)
  12. 1. 正则表达式简介
  13. 【Pix4d精品教程】Pix4d空三后处理:点云分类与过滤、DSM精编生成DEM、生成等高线案例详解
  14. 数据清洗 excel mysql_Excel获取MYSQL数据库数据
  15. 基于Tableau的疫情数据可视化看板
  16. BUUCTF_Misc题目题解记录
  17. 多文件批量下载打包成.zip
  18. 一、dubbo入门与实战
  19. 常用数据结构和算法总结
  20. 一梦江湖——华山快还钱是怎么会事呢?

热门文章

  1. Alvotech启动Stelara(R) (Ustekinumab)拟议生物仿制药AVT04的临床研究
  2. crm系统如何帮助企业提升客户满意度?
  3. 耦合、解耦是什么?怎么做到解耦呢?
  4. Linux离线升级redis-6.2.7
  5. Prometheus监控:rate与irate的区别
  6. 如何处理服务器网络连接不稳定?
  7. error LNK2001: 无法解析的外部符号 _sscanf 问题 解决方法
  8. 双电源8位I/O并行接口MRAM芯片MR256D08BMA45R
  9. 美国国内最大的招聘网站(转)
  10. 基于matlab的航迹发生器模拟,仿真输出经纬度、高度、俯仰、航向角等