【无标题】

发布时间:2024年01月12日

关于单片机RAM的变量,堆,栈

唔,由于老是容易忘记,事情太多脑子不够用,这里做一下随笔:

在这里插入图片描述
在这里插入图片描述

data段:存放初始化非0的全局变量;

bss段:存放未初始化或初始化为0的全局变量;

Heap(堆)段:由程序员通过malloc/free申请和释放;

Stack(栈)段:存放局部变量和函数的入口地址;

    其中栈的方向是由栈顶自上而下的,堆的方向则是自下而上的,如果RAM空间有限而且一个程序中局部变量较多或申请的堆空间过大,便会造成堆和栈冲突,并造成系统崩溃(自己暂时写的程序较小,暂时没有遇到过类似问题)。

    栈,也叫堆栈,是一种先进后出,插入和删除操作都在栈顶操作的线性表。栈的作用通常是保存函数返回地址及保存局部变量。每个函数在运行时都有自己的栈空间,局部变量越多,占空间占用越大,函数间调用越深,栈空间也越大。CPU将打断前的程序运行到的地址、寄存器的值保存到栈中,即保护现场;当打断执行完以后,又从栈中读取之前保存的值,即恢复现场。

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

文章来源:https://blog.csdn.net/tiange1996/article/details/135538391
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。