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

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

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

相关推荐
a1117767 小时前
2FA 验证码生成器(github登录验证 app)
笔记·学习
我的xiaodoujiao7 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest
人邮异步社区7 小时前
怎么把C语言学到精通?
c语言·开发语言
你想知道什么?9 小时前
线性回归-学习笔记
笔记·学习·线性回归
鱼毓屿御9 小时前
从「只会聊」到「边想边做」的跃迁
前端·学习·react.js
AOwhisky10 小时前
Python 学习笔记(第十五期)——运维自动化(下·后篇):堡垒机实战——paramiko高阶篇
运维·python·学习·云原生·自动化·运维开发
闪电悠米10 小时前
力扣hot100-41.缺失的第一个正数-原地哈希详解
数据结构·算法·哈希算法
WL学习笔记11 小时前
堆(数据结构)
数据结构·
minglie111 小时前
zynq中linux系统的自动登录和免密登录
学习
茯苓gao12 小时前
嵌入式开发笔记:Qt信号槽机制深度解析——从原理到实战的全方位指南
开发语言·笔记·嵌入式硬件·qt·学习