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

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

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

相关推荐
HAREWORK_FFF1 小时前
用CAIE认证为简历加分:AI学习者的标准学习周期与规划
人工智能·学习·百度
炸膛坦客2 小时前
单片机/C语言八股:(三)C 语言编译器的优化功能,包括 keil(仅作了解)
c语言·单片机·嵌入式硬件
jjjxxxhhh1232 小时前
[项目]-搭建一个git服务器呢,完整详细的落地方案
学习
三无少女指南2 小时前
聊聊JVM里的符号引用、直接引用与动态分派
jvm
人道领域2 小时前
【绝对干货】C语言常量,变量,内存全方位总结:从入门到精通,这一篇就够了!
c语言·开发语言
xiaoye-duck2 小时前
《算法题讲解指南:优选算法-链表》--51.两数相加,52.两两交换链表中的节点
数据结构·算法·链表
一叶飘零_sweeeet2 小时前
JVM 运行时数据区全解:从底层原理到 OOM 根因定位全链路实战
jvm
代码改善世界2 小时前
【数据结构】八大排序算法详解(C语言实现)|插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序、计数排序
c语言·数据结构·排序算法
2501_940315262 小时前
98验证二叉搜索树
java·数据结构·算法