C语言内存结构栈理解。单片机和PC不同,单片机局部变量在RAM,利用KEIL数据覆盖实现PC栈功能,但是KEIL也有栈,和模拟的栈。

电脑内存4G,开机应用程序运行较多时,内存占用多,关闭一些应用程序,内存占用变少。电脑中的应用程序比作调用的子函数,应用程序关闭,内存变少,释放。应用程序中的存储的数据还存在应用程序中。再打开,还会自动调出。应用程序存储在硬盘。单片机子函数中的相关变量参数信息也存在于整个项目工程程序编译后的执行代码中(或者叫目标代码),它存储在ROM。当下次调用时,认可通过目标代码调用。不是说局部变量存在栈中,被释放了,它就无家可归了。

当然单片机局部变量在RAM,利用KEIL数据覆盖实现PC栈功能,但是KEIL也有栈,和模拟的栈。由反汇编看出很多调用的子函数的局部变量也分配在R0-R7,用完释放,R0-R7会被用到其他被调用函数中分配局部变量。和PC栈原理不同。各个系统或者语言有各自的技术特点,灵活实现功能

C语言内存结构栈理解。单片机和PC不同,单片机局部变量在RAM,利用KEIL数据覆盖实现PC栈功能,但是KEIL也有栈,和模拟的栈。

C语言内存结构栈理解。单片机和PC不同,单片机局部变量在RAM,利用KEIL数据覆盖实现PC栈功能,但是KEIL也有栈,和模拟的栈。

栈原理类似单片机的通用寄存器R0-R7,经常被用来和CPU交换数据,这样更快速。

汇编语言中通用寄存器R0-R7被程序员控制频繁的和CPU,A累加器交换数据。而栈的操作是把程序员的操作程序封装到编译系统内部自动执行

单片机函数内部定义变量,编译后RAM也会增加相应的空间字节没原因在8051堆栈空间有限,局部变量也放到RAM,但通过数据覆盖技术实现分配释放综合利用

而其他操作系统的编译后提示信息例如

C语言内存结构栈理解。单片机和PC不同,单片机局部变量在RAM,利用KEIL数据覆盖实现PC栈功能,但是KEIL也有栈,和模拟的栈。

堆栈信息有其他表示。有的书中说栈的长度为1M也有说2M

楔子
一个可执行程序文件需要在计算机硬件上运行起来,其实质就是静态的文件被加载到内存中的过程,可执行程序文件只是一个程序的载体。那么执行一个应用后,它在内存中是一个怎样的结构呢,请关注今天的走进科学——《C/C++ 程序内存结构》

动&静
一个程序被加载到内存中,这块内存首先就存在两种属性:静态分配内存和动态分配内存。 
静态分配内存:是在程序编译和链接时就确定好的内存。 
动态分配内存:是在程序加载、调入、执行的时候分配/回收的内存。


————————————————
版权声明:本文为****博主「jirryzhang」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.****.net/jirryzhang/article/details/79518408