网站死链对网站影响,wordpress教程网主题,龙岗外贸网站制作,网站开发中网页之间的链接形式有点击上方蓝字关注我#xff0c;了解更多咨询任何程序运行起来都需要分配内存空间存放该进程的资源信息的#xff0c;C程序也不例外。C程序中的变量、常量、函数、代码等等的信息所存放的区域都有所不同#xff0c;不同的区域又有不同的特性。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语言的理解又会更加深刻一些。END*声明本文于网络整理版权归原作者所有如来源信息有误或侵犯权益请联系我们删除或授权事宜。戳“阅读原文”我们一起进步