[导读]关注「Linux大陆」,一起进步!本文作者:度白嵌入式任何程序运行起来都需要分配内存空间存放该进程的资源信息的,C程序也不例外。C程序中的变量、常量、函数、代码等等的信息所存放的区域都有所不同,不同的区域又有不同的特性。C语言学习者、尤其是在学习嵌入式的朋友,这些知识点一定要吃透...
本文作者:度白嵌入式
任何程序运行起来都需要分配内存空间存放该进程的资源信息的,C程序也不例外。C程序中的变量、常量、函数、代码等等的信息所存放的区域都有所不同,不同的区域又有不同的特性。C语言学习者、尤其是在学习嵌入式的朋友,这些知识点一定要吃透!
被欺骗的C进程
每一个C语言的程序被执行起来的时候系统为了更方便开发人员操作,会给每一个进程分配一个虚拟的内存空间,它实际上是从处理内存映射出来的。虚拟内存的起始地址结束地址都是固定的,因此虚拟内存的布局都是一样。比如有三个进程 P1 P2 P3 ,他们虽然得到的物理内存是完全不一样,但是从进程的角度来看他们三个得到的内存确实一模一样的。
假设你正在使用的计算机实际物理内存只有 1GB 大小,而当前系统运行了三个进程,Linux 会将 PM 中的某些内存映射为三个大小均为 4GB 的虚拟内存 ,让每个进程都以为自己独自拥有了完整的内存空间,这样极大地方 便了应用层程序的数据和代码的组织。
虚拟内存布局:
虚拟内存布局分为内核空间、栈、堆、数据段、代码段和一个不允许访问的空间(相当于一堵墙)。
一个用户进程可以访问的内存区域介于 0x0804 8000 到0xc0000000 之间,这个“广袤”的区域又被分成了几个部分,分别用来存放进程的代码和数据。
下面让我们更进一步地研究虚拟内存中每一个空间所存放的是什么类型的数据。
栈内存
栈内存是用于存放环境变量、命令行参数和局部变量的。栈内存空间十分有限,默认情况下栈的大小为 8M ,在嵌入式开发的时候我们应该尽可能减少使用栈空间。栈空间的增长,从上(高地址) 往下 (低地址)每当有一个函数被调用的时候,栈就会从上往下分配一个段,这一段空间就是一个栈帧,该内存空间用来存放该函数的局部变量。
当一个函数退出(调用结束)的时候,栈空间会从下往上释放一个栈帧,将所有的内存归还给系统。
注意:
栈空间中的内存存放的数据值是未知的, 因此每一个局部变量在使用之前最好做好初始化
栈内存的空间我们无法手动实现申请与释放,都是由系统自动完成,我们无法干预。
堆空间
堆空间是相对自由的空间,这是一个非常重要的区域,因为在此区域定义的内存的 生命周期我们是可以控制的:从 malloc( )/calloc( )/realloc( )开始,到 free( )结束,其分配和释放完全由我们开发者自定义,这就给了我们最大的自由和灵活性,让程序在运行的过 程当中,以最大的效益使用内存。
注意:
-
相对于栈空间来说,堆的内存空间相对大很多
-
堆空间的增长方式,从下(低地址)往上(高地址)
-
堆空间中的内存都属于匿名空间, 因此需要借助指针来访问
-
有开发者自行申请和释放的,如果没有释放那么这个空间将一直存在,直到程序结束。
数据段
数据段中存放着全局变量、静态变量、和常量这些数据,生命周期与程序一致。程序不止,数据不断(段)。
代码段
代码段中又分成了两个空间:
.text段:存放用户的代码(mian func ...)
init段:当程序运行之初的一些初始化的工作(由编译器根据系统来对应添加的)
内存管理是嵌入式学习的重点知识,也是判断一个人是否入门的重要标志。内存管理学得好,对C语言的理解又会更加深刻一些。
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
经过几十年发展,嵌入式技术已经用在了我们生活中的方方面面,但是嵌入式始终都带有小众,专业性强的属性,让很多非嵌入式领域的同学望而却步。近十几年的发展,物联网覆盖了越来越多领域,包括了家居,商业,工业,农业等领域,不仅吸引...
关键字:
嵌入式
物联网
技术
随着IT技术飞速发展,互联网已经进入了“物联网”时代。物联网中需要的大量设备不在依赖人与人之间的交互产生联系,更多通过协议、通信、程序设计等方式连接到一处。即 “物联网”的目的则是让所有的物品都具有计算机的智能但并不以通...
关键字:
嵌入式
物联网
计算机
最近看到APP上,给我推送了很多类似的回答,借此机会,也想着重新审视一下自己的学习历程,以及结合自身和大牛,分享一些学习经验,希望对大家有所启发和帮助。
关键字:
APP
嵌入式
C语言
万物智联时代,嵌入式技术及其应用的形态将更加丰富和多元,同时也将日益呈现深度物理融合、混合架构共存、群体智能协同、网络安全攸关等诸多新的计算特性。显然,经典的嵌入式系统体系结构、软硬件技术和开发方法都已很难应对新趋势下的...
关键字:
嵌入式
物联网
计算机
物联网是新一代信息技术的重要组成部分,是互联网与嵌入式系统发展到高级阶段的融合。通用计算机经历了从智慧平台到互联网的独立发展道路;嵌入式系统则经历了智慧物联到局域智慧物联的独立发展道路。
关键字:
嵌入式
物联网
计算机
今天,小编将在这篇文章中为大家带来工控主板的有关报道,通过阅读这篇文章,大家可以对工控主板具备清晰的认识,主要内容如下。
关键字:
工控主板
嵌入式
主板
随着工业4.0、医疗电子、智能家居、物流管理和电力控制等快速的发展和推进,嵌入式系统利用自身的技术特点,逐渐成为众多行业的标配产品。嵌入式系统具有可控制、可编程、成本低等,它在未来的工业和生活中有着广阔的应用前景。在现在...
关键字:
嵌入式
物联网
人工智能
长久来看,嵌入式只会越来越火,随着人工智能时代的发展,嵌入式必定又将迎来一次浪潮和技术的巨大变革。人工智能越是想要表达智能水平,就越要依靠嵌入式技术,嵌入式技术将朝着自动化控制和人机交互发展。嵌入式因其体积小、可靠性高、...
关键字:
嵌入式
物联网
人工智能
嵌入式软件技术到目前为止己经在很多领域起到了中流砥柱的作用,例如在电子消费、移动通讯方面,这种技术为我国的很多行业提供了更多的可能性。未来,嵌入式软件技术会为人类做出更大的贡献。伴随着计算机技术与电子技术的成熟发展,电子...
关键字:
嵌入式
软件
人工智能
esim卡的全名为Embedded-SIM,意思就是嵌入式的SIM卡。esim卡的原理简单来说,就是将手机传统插入到手机里的SIM卡直接嵌入进设备芯片中,这样大家就不必再手动物理插入SIM卡,减少了麻烦的同时也降低了si...
关键字:
嵌入式
esim卡
手机
在熟悉任务调度、程序分层和模块化编程关于软件架构、分层和模块设计后,除了函数调用设计中出现的情况外,还会遇到同层模块之前如何进行消息交互,通常是应用层之间。
关键字:
嵌入式
软件架构设计
一直以来,工控主板都是大家的关注焦点之一。因此针对大家的兴趣点所在,小编将为大家带来工控主板的相关介绍,详细内容请看下文。
关键字:
嵌入式
工控主板
主板
从事计算机和或电子行业相关领域工作的朋友,一般都听说过单片机和嵌入式。但是要问单片机和嵌入式两者之间有什么联系,大多数人都不能很好的解释清楚。想要弄清楚嵌入式和单片机有什么联系,首先就要弄明白什么是嵌入式,什么是单片机。...
关键字:
嵌入式
单片机
secure boot是指确保在一个平台上运行的程序的完整性的过程或机制。secure boot会在固件和应用程序之间建立一种信任关系。在启用secure boot功能后,未经签名的固件或程序将不能运行在该设备上。
关键字:
secure boot
嵌入式
旗芯微近日发布了最新一代Hyper控制器家族产品,全系列对标英飞凌 TC家族控制器,覆盖智能底盘、功能安全控制器、域控制器等应用领域。超融合HPU(Hyper Processing Unit)FC7300系列芯片的性能媲...
关键字:
嵌入式
控制器
摘要:随着计算机技术与电子科技的快速发展,人工智能、云计算等技术的不断进步,智能家居新型产业模式也得到了巨大的发展,至今国内智能家居市场投资达到了2396亿元,市场规模占比不断增大,未来十年内家居智能化将实现大规模应用。...
关键字:
STM32
嵌入式
人工智能
以前都是等着,家里电器坏了赶紧拆解一下,这回实在是等不及了,找个便宜的下手吧。这个遥控器用了好多年,感觉还是不错,起码电池挺禁用的。古人云,三人行必有我师焉。那么对于每一个设备,也都有我们可以学习的地方。
关键字:
嵌入式
工程师
近年来,随着计算机技术及集成电路技术的发展,嵌入式技术日渐普及,在通讯、网络、工控、医疗、电子等领域发挥着越来越重要的作用。嵌入式系统无疑成为当前最热门最有发展前途的IT应用领域之一。 嵌入式系统一般由嵌入式微处理器、外...
关键字:
嵌入式
嵌入式系统
计算机
自上个世纪七十年代提出嵌入式系统的概念以来,嵌入式系统以其高性能、低功耗、低成本和小体积等优势,获得了飞速的发展与广泛的应用,然而,由于受到当时硬件水平的制约,嵌入式系统的软件开发方式与以 PC 为代表的通用计算机系统的...
关键字:
嵌入式
硬件
计算机