C语言程序的内存地址分配
当一个C程序被编译为可执行程序我们运行这个可执行程序时系统会为这个程序分配一个虚拟内存以下就是其分配详情不同的操作系统分的内存大小可能不同但是顺序都是一样的只不过每个区域的大小不一高地址 ┌─────────────────────┐ 0xFFFFFFFF│ 内核空间 │ 操作系统占用用户程序无法访问│ 1GB供内核使用 │├─────────────────────┤ 0xC00000003GB 边界│ ││ 栈区 ↓ │ ← 向下增长从高地址向低地址│ 局部变量、形参 │├─────────────────────┤│ ││ 空洞 │ ← 栈和堆之间的大片空闲区域│ 可动态调整 ││ │├─────────────────────┤│ 堆区 ↑ │ ← 向上增长从低地址向高地址│ malloc/calloc 分配│├─────────────────────┤│ .bss段 │ ←未初始化的全局/静态变量默认值为0│ │├─────────────────────┤│ .data段 │ ←已初始化的全局/静态变量有初始值│ │├─────────────────────┤│ .rodata段 │ ←只读数据字符串常量、const 修饰的变量│ │├─────────────────────┤│ .text段 │ ← 代码段程序的机器指令只读│ 程序指令/机器码 ││ │低地址 └─────────────────────┘ 0x08048000Linux 默认加载地址1. 代码段.text只读存放内容程序的机器指令CPU 执行的二进制代码权限只读防止程序意外修改自己的指令生命周期程序启动到结束一直存在举例你写的printf(hello);编译后就在这里// 函数体编译后存放在 .text 段void func() {int a 10; // 函数指令在这里但变量 a 在栈上}2. 只读数据段.rodata常量区存放内容字符串常量、const修饰的全局变量权限只读修改会导致段错误生命周期程序启动到结束一直存在‘char *str hello; // hello 存放在 .rodata 段const int num 100; // num 存放在 .rodata 段全局 const3. 数据段.data已初始化数据段存放内容已经初始化的全局变量、静态变量初始值不为 0权限可读写生命周期程序启动到结束一直存在int global 100; // 存放在 .data 段static int count 5; // 存放在 .data 段4. BSS 段.bss未初始化数据段存放内容未初始化的全局变量、静态变量默认值为 0权限可读写生命周期程序启动到结束一直存在特性程序加载时操作系统会把 BSS 段全部清零int global2; // 存放在 .bss 段默认值为 0static int count2; // 存放在 .bss 段默认值为 05. 堆区Heap动态分配存放内容malloc、calloc、realloc分配的内存特点手动分配和释放mallocfree从低地址向高地址增长sbrk/mmap空间较大但分配速度比栈慢如果不释放会造成内存泄漏int *p malloc(100 * sizeof(int)); // 在堆上分配 400 字节// ... 使用 ...free(p); // 手动释放6. 栈区Stack函数调用存放内容局部变量、形参、函数返回值、函数调用信息栈帧特点自动分配和释放函数调用时压栈返回时弹栈从高地址向低地址增长向下增长空间有限通常默认 8MB超出会栈溢出分配速度极快移动栈指针即可void func(int a, int b) { // a 和 b 在栈上int x 10; // x 在栈上char str[100]; // str 在栈上} // 函数返回后x、str、a、b 全部被自动回收

相关新闻

StarRocks 3.1.1 深度优化:GROUP BY 非聚合字段查询提速落地方案

StarRocks 3.1.1 深度优化:GROUP BY 非聚合字段查询提速落地方案

一、业务痛点 & 适用场景 在实时数仓建设、用户画像分析、交易数据统计的一线开发场景中,有一个需求高频且棘手:基于用户维度聚合统计交易总金额,同时精准保留每个用户最新一笔交易的明细维度信息。 简单来说就是:既要聚合汇总…

2026/10/28 15:34:23 阅读更多 →
数字电路设计核心:逻辑门与时序电路实战解析

数字电路设计核心:逻辑门与时序电路实战解析

1. 数字电子技术基础回顾 在开始深入探讨之前,我们先快速梳理一下数字电子技术的几个核心概念。数字电路与模拟电路最大的区别在于信号处理方式——数字电路处理的是离散的0和1信号,而模拟电路处理的是连续变化的信号。这种特性使得数字系统具有抗干扰能…

2026/10/31 5:36:36 阅读更多 →
开源脚手架!一款 SpringBoot 低代码快速开发平台!

开源脚手架!一款 SpringBoot 低代码快速开发平台!

大家好,我是 Java陈序员。 作为独立开发者,搭建系统时,80% 的时间都耗费在重复编写登录、权限、CRUD、数据加密这些基础功能上,真正留给核心业务的时间少之又少,这种模式的开发效率十分低下。 今天,给大家介…

2026/11/2 12:03:18 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/2 0:25:10 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/2 10:46:11 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/2 10:47:40 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/2 1:16:51 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/2 10:46:31 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/2 10:46:26 阅读更多 →

日新闻

周新闻

月新闻