单片机中的堆和栈

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

一、定义

二、两者区别

总结



前言

        在写程序代码的时候,我们可能往往都疏忽了堆和栈这两种数据结构。只是随便设置一下大小保证程序可以正常运行就行了。有的时候在找工作的时候面试官问你堆和栈一脸懵逼,今天在这里做一下简单的总结。


提示:以下是本篇文章正文内容,下面案例可供参考

一、定义

        在单片机中,堆和栈是两种用于管理内存的数据结构。

1.栈(stack):

        栈是一种后进先出(LIFO)的数据结构,它用于存储函数调用的局部变量、函数参数以及函数返回地址信息(地址信息:当一个函数被调用时,程序需要知道在函数执行完毕后继续执行的位置,因此,函数的返回地址会被压入栈中)等。栈的大小是固定的,由编译器在编译时确定。当一个函数被调用时,他的局部变量和参数会被分配到栈上,并在函数返回时自动释放。栈的操作非常高效,因为它只需要移动栈指针即可。

2.堆(Heap):

        堆是一种动态分配的内存方式,它用于存储程序运行时动态创建的对象或数据。堆的大小是不固定的,可以根据需要进行动态扩展。在单片机中,堆的管理通常由操作系统或者编译器提供的库函数来完成。通过调用这些库函数,可以在堆上分配内存(例如使用malloc函数),并在不需要时释放内存(例如函数free函数)。由于堆的管理需要额外的开销,所以堆的操作相对较慢。

二、两者区别

1.分配方式:

        (1)栈:由编译器自动分配和释放内存,存储局部变量和函数调用的上下文信息。栈的分配速度快,但大小有限。

        (2)堆:由程序员手动分配和释放,存储动态分配的对象。堆的分配速度相对较慢,但是大小理论上没有限制。

2.内存管理:

        (1)栈:由编译器自动管理,无需手动释放内存。当函数执行完毕或者变量超出作用域时,栈上的数据会自动被销毁。

        (2)堆:由程序员手动管理,需要手动释放内存。如果不及时释放堆上的内存,会导致内存泄漏。

3.存储内容:

        (1)栈:主要存储局部变量。函数参数、返回地址等。栈上的数据是按着先进后出的顺序进行存储和访问。

        (2)堆:主要用于存储动态分配的对象,如使用new 关键字创建的对象。堆上的数据可以通过指针进行访问。

4.分配效率:

        (1)栈:分配和释放速度快,进需要移动栈指即可完成

        (2)堆:分配和释放速度相对较慢,需要在堆中搜索可用的内存块。


总结

      知识在于积累,每天进步一点点!

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值