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

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

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

相关推荐
小手指动起来几秒前
保姆级提示词工程学习总结(含实操示例+工具推荐)
人工智能·学习·自然语言处理
绛橘色的日落(。・∀・)ノ7 分钟前
Matplotlib实践学习笔记
笔记·学习
chase。8 分钟前
【学习笔记】AGILE:把人形机器人强化学习从“玄学”变成“工程学”
笔记·学习·敏捷流程
汀、人工智能13 分钟前
[特殊字符] 第2课:字母异位词分组
数据结构·算法·链表·数据库架构··字母异位词分组
良木生香26 分钟前
【C++初阶】:C++类和对象(下):构造函数promax & 类型转换 & static & 友元 & 内部类 & 匿名对象 & 超级优化
c语言·开发语言·c++
bu_shuo26 分钟前
git练习学习网站【中文网站】
git·学习
网安INF1 小时前
数据结构第一章复习:基本概念与算法复杂度分析
数据结构·算法
无巧不成书02181 小时前
C语言零基础速通指南 | 1小时从入门到跑通完整项目
c语言·开发语言·编程实战·c语言入门·零基础编程·c语言速通
EnglishJun1 小时前
ARM嵌入式学习(十四)--- IMX6ULL的I2C通信实现
arm开发·学习
_李小白2 小时前
【OSG学习笔记】Day 31: 渲染到纹理(RTT)
笔记·数码相机·学习