C语言内存分区详解:BSS、Data、Stack、Heap、Code、Const区域解析

创始人
2025-03-24 04:24:16
0 次浏览
0 评论

C语言代码组成 - BSS、Data、Stack、Heap、Code、Const

组装并连接C语言后,它变成了操作符号。
其中,变化/变化的全球区域被分为不适当的可变区域和一个可变准备区域,并且代码区域被分为固定的符号和区域。
简而言之,该代码可以分为6 个部分,包括:BSS区域(可变/不稳定的可变区域),数据区域(实际全局可变区域),堆叠区域(堆叠区域),桩区域(堆积区域),符号(代码区域)和const区域(const)。
1 全球变量和固定的国内变量分配在BSS编程和不断变化的全球区域的数据区域中,但是为什么它们分为BSS领域和数据字段? 实际上,当我们定义通用区域或固定区域时,我有时会为其设置初始值,有些人不会设置准备工作。
这个本地固定变量如何准备好以及何时准备? 如果您分析翻译的汇编代码,您会发现在运行代码后,将有指令设置变量的值。
这也是为什么需要将全球/固定更改领域分为BS和数据的原因。
2 堆栈堆栈是此数据结构。
b)工作。
运行作业时,所有分配它们的临时变量都将在堆栈上发布。
省份也是如此。
因此,堆栈函数为:3 在整个操作周期内,Al -kuma区域中全局变量的内存代码有效,并且在内存功能完成后将发布。
两个内存模型均由翻译器确定,符号无法控制。
用户控制是否有内存? 答案是肯定的,记忆的这一部分是堆。
用户需要使用的动态内存是通过malloc函数自定义的,并且可以由符号使用,直到发布为止。
当不再需要内存的这一部分时,可以通过自由功能启动并返回堆。
从中,我们可以看到桩内存是根据要求专用的。
这给代码提供了很大的自由,但它也将产生负面影响,例如:记忆破碎引起的malloc失败; 4 我们收集的代码通常以Flash下载,但是有两种方法可以运行它:以RAM运行并在ROM中运行。
Randor访问存储器,即启动启动后,将代码复制到RAM,然后,计算机索引开始在代码中运行,指示RAM。
有时,在纠正错误时,我们可以将代码直接下载在更正的RAM中,从而提高错误速度。
在大多数情况下,我们的符号始于闪光灯。
5 代码中固定区域的恒定面积部分用作代码区域中的直接数字,但是像指定的字母一样,分配给组的一系列数值,这些常数具有固定的空间。
翻译器通常确定闪存中的变量。
6 如何确定每个区域的大小:代码区域和const区域:它取决于代码的大小以及代码中常数的数量。
BSS和数据区域:这取决于代码中指定的全局和局部变量的数量。
堆栈区域:可以通过使用来定义,但是使用必须根据您的代码位置测量合理的值,然后确定其大小。
Al -kuma区域:RAM的其余部分将由翻译人员用作桩区域。
7 以构建-in符号STM3 2 的一般起始过程为例。
如果您想知道启动详细代码的过程,则可以考虑启动集合文件。

c语言运行的步骤

C语言程序的执行过程可以分为六个主要步骤:编辑,预处理,编译,链接,加载和运行。
编辑阶段是程序员使用编辑器创建C语言源代码时。
这被保存为带有.c扩展名的文件。
在预处理阶段,这些说明主要用于优化#符号。
编译阶段将源代码转换为目标代码。
这是机器可读的,但不是最终可执行程序。
编译器检查源代码是否错误,例如语法和类型错误。
编译的代码通常保存为.o或.obj文件。
链接阶段结合了多个对象和库文件以生成一个完全可执行的程序。
负载阶段将生成的可执行程序加载到内存中,并准备运行。
执行阶段是在此阶段执行程序的过程。
计算机遵循程序代码中的说明以执行各种操作并最终输出结果。
在编辑过程中,程序员可以利用各种编辑器,例如VisualStudiocode,sublimetext或Notepad ++。
这些编辑者通常会提供突出显示,代码完成和错误提示,以提高编程效率。
预处理步骤可用于包括标头文件,定义宏,有条件的汇编等。
编译器处理这些说明并生成适当的代码。
链接阶段涉及将编译的对象文件与其他库文件合并以形成一个完全可执行的程序。
负载阶段将程序加载到内存中并准备运行。
在执行阶段,该程序是根据代码逻辑执行的,以完成给定的任务并最终输出结果。
在实际开发过程中,程序员可以通过整合其开发环境(IDE)来简化这些步骤。
IDE通常集成了编辑器,编译器,调试器和图形接口,以使整个开发过程更加方便。
通过IDE,程序员可以轻松编写,编译,链接和调试程序以提高发展效率。
简而言之,编辑,预处理,编译,链接,加载和执行在C程序的执行过程中起关键作用,从而使程序可以平稳运行并输出正确的结果。

C语言 + 单片机-内存分布详解

C语言内存分区的电路图如下。
1 代码面积2 恒定面积3 静态(静态)区域。
参数是开放内存的第一个地址。
5 堆栈区域(堆栈)STM3 2 中的内存分配如下。
1 随机内存-RAM2 -ROMSTM3 2 F1 03 芯片的内部区域如下图所示。
编译程序完成后,您可以看到编译的大小信息,包括代码大小,RO-DATA,RW-DATA和ZI-DATA的大小。
这可以帮助开发人员和嵌入式系统设计人员更好地管理内存资源,并帮助程序在目标设备中正确运行。
代码:代码段表示编译器创建的执行计算机指南。
RO-DATA:数据段表示程序的仅读取数据部分,包括常数,字符串,定义为const的变量。
RW-DATA:数据段表示数据并将数据初始化为“ Not Zero”,该数据在RAM区域中,应用程序可以修改内容。
全局和静态变量初始化为不是零。
Zi-data:数据段表示0值和RW-DATA之间的差异与RW-DATA相同。
它包含未初始化和初始化的全局和静态变量。
Zi-Data的堆栈空间(堆栈)和堆空间(堆):C语言中定义的局部变量属于堆栈空间,使用Malloc的动态分配变量属于髋关节空间。
该程序的堆栈和臀部空间属于Zi-Data区域,这些空间初始化为零。
它包括程序的存储状态与闪存区域中存储的数据以及存储在SRAM区域中的数据有关。
该程序存储在非易失性内存中,例如内部闪存区域。
程序运行时,程序通常需要一些临时数据,这些数据通常存储在闪存中,但必须复制到RAM。
程序存储分布如下图所示。
当程序存储在芯片的内闪存中时,空间是代码+RO-DATA+RW-DATA的总和。
运行程序时,必须占用内部SRAM空间,并且占用空间是RW-DATA + ZI-DATA的总和。
结论:为了使该计划正常运行,您必须满足以下两个条件: 编译程序后,可以在文件的最后一部分中看到ROM的总大小。
部门的基本和好处:首先,区分代码段和数据段。
通过程序源代码编辑的机器指南放置在代码段中。
数据段包括“ .data”,“ .bss”和“ .rodata”,并且程序中定义的全局和局部变量称为数据段。
程序的程序“代码段”和“数据段”是单独存储的,数据和准则在两个虚拟内存区域中映射,并且在过程中读取代码段。
最新的CPU缓存旨在将数据缓存和命令缓存分开,并且程序命令和数据分别存储以提高缓存命中率。
数据段也应分为“ .data”,“ .bss”和“ .rodata”,主要由内存空间占据,并根据阅读和写作权限进行区分。
“ .data”段“ .bss”段都是读取数据段,“ .rodata”存储读取的数据,主要是一些const变量和字符串常数。
单独设置“ .rodata”段的优点是,可以将属性映射到读取,减少修改并保存。
全局变量还分割了初始化和非原始化。
全局变量初始化为0,并且统一的全局变量存储在数据区域中。
该程序具有两个存储状态。
静态程序存储在非挥发性内存中。

请问源代码是什么意思啊?

源代码(也称为源程序)是在计算机软件开发过程中编写的原始代码。
通常,我们联系的大多数程序文件都是翻译和包装的。
但是实际上,这些文件背后包括计算机语言行,这是源代码。
以C语言为例,以下代码是典型的源代码:#includeIntMain(){inta,b,c;/*确定三个变量a,b,c*/a = 1 0;数学活动和输出结果。
其中,#include线包含对标准输入和输出库的引用,Intmain()定义了主函数,Inta,b,c确定三个整数变量,a = 1 0和b = 2 变量A和b的分配值,C =源代码是软件开发基础。

c语言开头代码是什么

在C编程中,初始化编码段通常包含对标题文件,功能声明和主函数的定义的引用。
以下是一个常见的代码模板:cintmain(){//启动主函数的定义//实现代码logic}该代码的核心组件如下:1 例如,``#includes''参赛和输出相关功能的声明,例如'printf()`and s scanf()`。
调用编译器级别的可用性。
根据特定要求,编程可以包括在主要功能中,例如有条件判断,循环,功能对话等。
特征和清晰的结构是建造的。
热门文章
1
JavaScript数组转字符串:两种方... 如何 用 js把 数组 转换成 字符串这里的系列窗口为您提供了两种方式。1。使用...

2
C语言实现三角形面积计算:海伦公式应用实... 如何用c语言编写已知三角形三边求面积?已知语言C可以找到三角形三角侧的面积,如下...

3
计算机专业核心:C语言在多学科中的应用与... 哪些专业学c语言对于计算机专业来说,入门级编程语言C是用来为学生的编程打下坚实的...

4
JSF架构解析与Java学习资源分享:J... JavaServerFacesJSF体系结构JavaServerFaces(JS...

5
数据结构C语言版深度解析与C语言入门很简... 《数据结构(C语言版)》.严蔚敏吴伟民著.pdf在《数据结构(C语言版)》一书中...

6
C语言字符串常量解析:区别、用途及存储方... 什么是字符串常量字符串常量是C语言中的一种数据类型,它是由一对双引号括起来的字符...

7
C语言printf函数:格式字符串与输出... printf函数中的格式与输出项有什么关系?在C语言中,printf函数中的格式...

8
Excel技巧:计算字符串起始位置与合并... 如何计算字符串在特定文本中的起始位置,怎么计算字符串在特定文本中的起始位置您可以...

9
Python发音全解:掌握正确的发音方法... python怎么读我的很多学习编程的朋友可能都知道Python这个词,但是他们中...

10
字符与字符串:编程中的基础文本类型解析 字符串什么意思字符串是由数字、字母和下划线组成的字符串,表示为s=“a1a2…a...