嵌入式系统C语言资源分类与内存分布分析

发布时间:2026/10/3 17:18:35

嵌入式系统C语言资源分类与内存分布分析 1.C语言存储分类总览在C语言/嵌入式程序运行中内存通常被划分为以下几个主要区域代码段Code Segment / .text用于存放程序的机器指令即编译后的代码。这部分通常是只读的以防止程序在运行时意外修改指令。数据段Data Segment / .data存放程序中已初始化的全局变量和静态变量。BSS段.bss存放程序中未初始化的或初始化为0的全局变量和静态变量。BSS不占用可执行文件的实体存储空间只记录所需空间大小。堆Heap用于程序运行时的动态内存分配如C语言中的malloc/free。这部分内存由程序员手动申请和释放若不释放容易造成内存泄漏。其生长方向通常是向高地址生长的。栈Stack用于存放局部变量、函数参数、返回地址、中断现场保护数据等。由编译器/CPU自动分配和释放。其生长方向通常是向低地址生长的。2.C变量到底住哪里3. 常见误区const 全局住.rodata只读const 局部绝大多数还是栈只有编译器优化后可能放到 .rodata函数内static不占栈编译期就分好 RAM位置.data 或 .bss只是作用域限制在函数内4. .data vs .bss关键差异5. 堆 vs 栈6. 每个线程的栈从哪来关键每个RTOS线程有独立的栈。栈本身住在哪里看创建方式rt_thread_t t rt_thread_create(foo, foo_entry, NULL, 8 * 1024, // ← 栈大小 8 KB 15, 10);rt_thread_create内部调用rt_malloc(stack_size)从堆里分配栈所以主线程 / 内核线程等在启动时静态分配不吃heap线程越多heap越吃紧7.内存(RAM)、堆、栈、Flash 之间的关系在嵌入式硬件语境下Flash通常等同于只读存储器ROM断电不丢失数据而内存Memory通常指静态或动态随机存储器SRAM/SDRAM/RAM断电会丢失数据。在大多数嵌入式系统如基于ARM Cortex-M的单片机中RAM的物理地址是从低到高排列的。软件层面将这块物理空间划分成了如下结构它们的关系可以从物理存储和程序运行两个维度来理解1. 物理层面的包含关系内存RAM包含了堆和栈。堆和栈只是RAM在软件层面上划分出来的两块不同用途的工作区域。内存RAM还包含了数据段和BSS段的运行时状态。2. 程序断电与通电启动时的Flash与RAM的关系烧录/断电状态下仅FlashFlash中不仅存储了代码段程序指令和常量区如const修饰的全局变量、字符串常量还存储了数据段Data的初始值。因为RAM断电会丢失数据全局/静态变量的初始值必须保存在Flash中。嵌入式系统上电复位时会执行一段启动代码Startup Code它会做两件关键的事情将Flash中存储的数据段初始值拷贝到RAM的数据段中。在RAM中划分出一块区域作为BSS段并将其全部清零。初始化栈指针SP将RAM剩下的空间按需划分为堆Heap和栈Stack供程序运行使用。3. 堆Heap与 栈Stack在内存中的博弈在有限的嵌入式RAM中堆和栈通常位于未使用RAM区域的两端栈Stack通常位于较高地址向下低地址生长。堆Heap通常位于较低地址向上高地址生长。关系与风险两者共享剩余的RAM空间。如果局部变量开辟过大如深层递归、巨大的局部数组或者动态分配内存过多导致堆和栈的边界相撞就会发生栈溢出Stack Overflow这是嵌入式系统程序崩溃的常见原因。总结Flash是代码和初始数据的“永久仓库”内存RAM是程序运行的“临时工作台”。在RAM这个工作台上数据段和BSS段放的是长期的“公共工具”全局/静态变量栈放的是随用随扔的“临时草稿”局部变量而堆则是根据需要随时划出来的“自由拼装区”动态内存
延伸阅读

更多相关文章

2026/10/1 14:32:26

怎么让AI做表格?AI导出鸭苹果版将各大AI模型输出的管道/空格/JSON表格统一解析为结构化数据,一键导出Excel或Word标准表格。

怎么让AI做表格?AI导出鸭苹果版将各大AI模型输出的管道/空格/JSON表格统一解析为结构化数据,一键导出Excel或Word标准表格。正文 当今主流AI大模型(ChatGPT、DeepSeek、豆包、千问、Kimi等)都能生成表格,但输出格式五花…

2026/10/2 17:41:53

【多模态】22-基于Pydantic的多模态LLM应用

案例目标 本案例展示了如何使用Pydantic从多模态大语言模型中提取结构化数据。主要目标包括: 使用OpenAI GPT-4V、Fuyu-8B、LLaVA、CogVLM和MiniGPT-4等多模态模型分析图像内容通过Pydantic定义数据模型,将非结构化图像内容转换为结构化数据比较不同多…

2026/10/3 17:15:42

嵌入式C语言面试实战:从指针内存到通信协议解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 17:15:42

车企数字化转型核心:从数据中台到全链路系统规划

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 17:15:41

Ubuntu 20.04 OpenSSH升级实战:从8.2p1到9.x的完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 8:16:46

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/10/2 18:20:53

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/3 15:02:19

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/3 0:04:31

国内大学生必备的AI写作辅助软件是哪款?

国内高校学生在论文写作过程中,越来越依赖AI辅助工具提升效率,主流方案以本土化全流程工具为核心,结合通用大模型与专业插件,覆盖选题构思、框架搭建、初稿撰写、查重降重、格式调整等关键环节,本文将深入解析当前主流…

2026/10/3 0:04:31

Codex接入Jev模型完整指南:配置方法、本地部署与踩坑排查

最近不少人在讨论 Codex 搭配 Jev 这套玩法,我一开始没太当回事,直到自己把 Jev 接进 Codex跑了几轮编码任务之后,才明白那些说“直接起飞”的人是怎么想的。Codex 作为工具本身已经够能打了,但模型固定、上下文策略固定&#xff…

2026/10/3 0:04:31

GitHub 热门: NVIDIA/Model-Optimizer

👋 Hi,我擅长 AI 大模型应用落地、意识解码与 AI 开发工具链 。 💡 创业路上,用技术换时间,一起把 AI 变成生产力 🚀 >GitHub 热门: NVIDIA/Model-Optimizer 凌晨两点,你刚把跑通了的 Qwen3.…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑