打印
[STM32F1]

STM32的堆和栈

[复制链接]
25|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chenci2013|  楼主 | 2025-2-27 16:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、堆和栈是什么?
①栈(Heap)
栈是一种后进先出(LIFO)的数据结构,用于存储函数的局部变量、函数参数、返回地址等。
在STM32中,栈通过栈指针(Stack Pointer)实现,指向当前栈顶元素的地址。
栈的管理由编译器自动进行,无需程序员手动控制。
栈的大小通常在编译时确定,STM32F1系列微控制器通常采用递减式满栈,栈的大小可以通过编译器设置。
②堆(Stack)
堆主要用于动态内存分配,程序员可以根据需要动态地申请和释放内存。
堆的管理需要程序员手动进行,通过调用malloc()和free()等函数实现。
堆的大小通常较大,但频繁的内存申请和释放可能导致内存碎片问题。
2、堆和栈有什么区别?
①管理方式:栈由编译器自动管理,堆需要程序员手动管理;
②空间大小:堆的空间大学远高于栈;
③碎片问题:堆容易产生内存碎片,栈不会;
④生长方向:栈的生长方向是向下的(即内存地址减小),堆的生长方向是向上的(即内存地址增加);
⑤分配方式:栈的分配方式包括静态分配和动态分配(由allocate函数进行),堆仅有动态分配;
⑥分配效率:栈的效率较高,因为计算机会在底层对栈提供支持,堆的效率极低的,因为需要搜索可用空间并进行复杂的内存处理。
3、关于堆和栈的管理建议
①合理设置栈大小;
②避免在栈中定义大数组;
③谨慎使用堆;
④利用内存池;
⑤优化数据结构;
⑥检查内存泄露。

使用特权

评论回复
沙发
飞思啦| | 2025-2-27 17:23 | 只看该作者
堆栈在任意单片机,甚至linux系统下面都避不开,学习堆栈对自己的开发还是很有帮助的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

120

主题

6478

帖子

4

粉丝