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

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

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

相关推荐
行思理8 小时前
go语言学习难度及适合学习的人群
开发语言·学习·golang
楚山之石12 小时前
【Medical Image Analysis】深度学习医学图像合成综述:伪CT、合成MRI与合成PET的架构、性能与临床边界
图像处理·人工智能·学习·mr·mri
Zwawa12 小时前
编译器工具链:GCC、Clang、MSVC、ICC、armclang
c语言·嵌入式·编译器
学逆向的12 小时前
C 指针常量与常量指针
c语言·开发语言·网络安全
Li_RuiQi13 小时前
DAgger方法演进_独立学习笔记
笔记·学习·计算机视觉
水饺编程13 小时前
第2章:Linux 基础,exit 命令
linux·c语言·汇编
shehuiyuelaiyuehao14 小时前
算法56,重排链表
数据结构·算法·链表
suhan15 小时前
【数据结构】七、查找:1.查找的概念、线性结构查找(顺序、折半(二分)、插值、稠密、分块、倒排)
数据结构·算法·排序算法
极客 - L U15 小时前
卡尔曼滤波从零到精通
c语言·数据结构·单片机·嵌入式硬件·mcu
SteveSenna16 小时前
aubo学习:realsense手眼标定
学习·机器人·视觉检测