freeRTOS学习(一)——堆和栈

1、堆

就是一个空闲的内存,在此实现内存的分配和释放,由我们分配和释放

2、栈

是由操作系统自动分配内存,用来存放函数的参数值、局部变量等

3、两者的区别:

(1)  管理方式不同:栈是由操作系统自动分配释放,堆是由开发者来实现内存的分配和释放。

(2)  生长方式不同:栈是从高向低生长,也就是说向下生长,内存地址由高到低;堆是从低向高生长,也就是说向上生长,内存地址由低到高。

(3)  空间大小不同:栈    一般是 1M ~10M 不等(和堆相差很多);

                               堆     进程可申请的堆大小为虚拟内存大小;

                              一般来说,栈的空间大小远远小于堆的空间大小。

(4)  分配方式不同:栈可静态分配或动态分配;堆都是动态分配的。

(5)  存放的内容不同:栈存放的内容,函数返回地址、相关参数、局部变量和寄存器内容等。栈在函数调用时,首先压入主调函数中下条指令(函数调用语句的下条可执行语句)的地址,然后是函数实参,然后是被调函数的局部变量。本次调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向最开始存的指令地址,程序由该点继续运行下条可执行语句。

堆,一般情况堆顶使用一个字节的空间来存放堆的大小,而堆中具体存放内容是由程序员来安排的

(6)  内存速率不同:栈的内存速率较快。栈由操作系统自动分配,会在硬件层级对栈提供支持:分配专门的寄存器存放栈的地址,这就决定了栈的效率比较高。堆因为是程序员分配内存 ,而且是由C/C++函数库提供的,机制比较复杂,所以速率较慢。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值