C/C++中的内存区域划分

一、内核空间

1.1.操作系统内核占用。

1.2.用户态程序无权访问,试图访问会导致段错误。

二、栈(Stack)

2.1.生长方向:向下(高地址 → 低地址)

2.2.内容: 函数局部变量 函数参数 返回地址、保存的寄存器

2.3.管理方式:自动管理(函数调用时压栈,返回时弹栈)

2.4.特点:速度快,大小有限(通常几 MB),溢出导致"栈溢出".

三、 内存映射段(Memory Mapping Segment)

3.1.用于加载共享库、大文件映射、匿名内存等。

3.2.通过 mmap() 系统调用分配。

3.3.位于堆和栈之间,避免两者冲突。

四、 堆(Heap)

4.1.生长方向:向上(低地址 → 高地址)

4.2.存储内容:动态分配的内存(malloc, calloc, realloc, new)

4.3.管理方式:手动管理 ------ 程序员负责 free / delete,否则泄漏;OS 在进程结束时回收

4.4.特点:容量大(受限于虚拟内存),但分配较慢,易碎片化

5. 数据段(Data Segment)

5.1.存放已初始化的全局变量和静态变量

包括:

.data 段:已初始化的全局/静态变量

.bss 段:未初始化或初值为0的全局/静态变量(运行时清零)

5.2. 生命周期:整个程序运行期间 访问权限:可读写

六、 代码段(Text Segment)

6.1.存放程序的机器指令(编译后的二进制代码) 也包含字符串字面量、const 全局常量等只读数据

6.2.访问权限:通常只读 + 可执行(防止修改代码) 生命周期:程序启动即加载,退出才卸载

七、总结口诀(便于记忆)

上栈下堆中间映,
数据代码底下停。
栈自管,堆手控,
全局静态住数据,
代码只读永不动。

相关推荐
Blockbuater_drug26 分钟前
FreeSASA: 开源 SASA 计算库,pip 一条命令替代 NACCESS
c语言·开源·sasa·freesasa·溶剂可及表面积·naccess·python api
潜心一志1 小时前
HALCON软件——基本架构,算子参数
学习·计算机视觉
Logic1011 小时前
C语言/数据结构位运算题解:异或XOR找出蛋糕订单中的“VIP独特口味“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
Logic1012 小时前
C语言/数据结构位运算题解:异或XOR找出飞行棋中的“独特颜色棋子“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
爱吃苹果的日记本2 小时前
数据结构第三课(时间复杂度)
数据结构·学习
Logic1014 小时前
C语言/数据动态规划题解:翻转一次子数组后的最大子数组和——四状态DP(O(n)时间O(1)空间)
c语言·数据结构·动态规划·时间复杂度·算法题·状态机dp·最大子数组和
万年咸鱼5 小时前
JVM 内存区域详解
jvm
小π军5 小时前
最大重叠区间数量
数据结构·算法
泡泡鱼(敲代码中)5 小时前
MySQL基础学习笔记:从数据模型到DDL全掌握
开发语言·数据库·笔记·学习·mysql
Logic1016 小时前
C语言/数据结构字符串题解:找出DNA序列中未配对的独特序列——排序+遍历(O(nlogn))
c语言·数据结构·字符串·数组·排序·时间复杂度·算法题