资讯动态

C语言内存分布(简洁)

发布时间:2026/10/21 11:24:31 来源:尧图企业网站定制
C语言内存分布一、整体内存结构进程虚拟内存空间分为两大区域用户区 内核区地址顺序低地址 → 高地址用户区顺序正文段 → 只读常量段 → 静态区 → 堆区 → 栈区最高地址内核区增长方式堆向上增长、栈向下增长图示​二、各区详细知识点1. 内核区最高地址归属不属于用户区存储操作系统内核代码、内核数据、页表权限用户态程序无法直接访问特点所有进程共享同一份内核空间2. 栈区用户区最高处存储局部变量、函数参数、函数返回地址、临时变量管理系统自动分配、自动释放增长向下增长向低地址生命周期函数调用期间有效函数结束立即销毁缺点空间极小容易栈溢出大数组、递归3. 堆区位置栈下方、静态区上方存储malloc、calloc、realloc动态内存管理程序员手动申请、手动free释放增长向上增长向高地址生命周期free之前一直存在问题忘记free造成内存泄漏4. 静态区全局区【重点】静态区 .data段 .bss段存储所有全局变量、所有static静态变量特点不在栈上程序全程存在① .data 段已初始化的全局变量、static变量② .bss 段未初始化的全局、static变量程序启动自动清零不占文件空间5. 只读常量段.rodata存储字符串常量、全局const常量权限只读特点禁止修改修改触发段错误例子char *p hello;字符串存在这里6. 正文段代码段 .text位置用户区最低地址存储程序二进制指令、所有函数代码权限只读特点多进程共享保护代码不被篡改三、变量归属总览全局变量、static变量 →静态区普通局部变量 →栈区malloc动态内存 →堆区字符串常量 →只读常量段函数代码 →正文段代码示例intg_a10;// 全局已初始化变量 → 静态区 .dataintg_b;// 全局未初始化变量 → 静态区 .bssconstchar*phello;// hello 字符串常量区voidtest(){staticints20;// static局部变量 → 静态区 .data不在栈inta;// 局部变量 → 栈区int*ptrmalloc(4);// malloc内存 → 堆区ptr指针变量本身在栈}四、高频易错点1. static变量全部在静态区不在栈2.char *pabc只读不可改char arr[]abc在栈可改3. 堆手动管理栈自动管理4. 栈向下、堆向上相互对向增长5. 内核区用户无法访问

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑