栈和堆的区别、FreeRTOS 中的任务栈

发布时间 2023-09-23 20:12:36作者: 杭冷卉

栈和堆的区别、FreeRTOS 中的任务栈


01 堆和栈的概念

功能 堆是一块用于动态分配内存的区域,用于存储程序运行时动态创建的对象。堆的大小可以在程序运行时动态调整。
特点 堆的分配和释放是由程序员手动控制的。堆的分配和释放顺序的任意的,不需要遵循先进先出的原则。堆的分配和释放需要显式的调用响应函数。
功能 栈是一种用于存储局部变量和函数调用信息的数据结构。栈的大小在程序编译时确定,通常较小。
特点 栈的分配和释放是由编译器自动控制的。栈的分配和释放顺序遵循先进后出的原则。栈的分配和释放无需显式地调用函数,由编译器自动完成。

02 堆和栈的区别

分配方式 堆的分配是动态的,由程序员手动控制。堆的分配可以在任意时刻进行,不需要遵循特定的顺序。 栈的分配是静止的,由编译器自动控制。栈的分配在编译时确定,无法在运行时改变。
分配效率 堆的分配效率较低,需要在运行时进行动态分配和释放。 栈的分配效率较高,由编译器在编译时确定分配大小。
空间管理 堆的空间管理由程序员手动控制,需要注意内存泄漏和内存碎片的问题。 栈的空间管理由编译器自动控制,无需程序员关注。

03 FreeRTOS 中的任务栈

功能:FreeRTOS 中的任务栈用于存储任务的上下文信息,包括局部变量、函数调用信息等。

特点:

  • 大小
    • 任务栈的大小在创建任务时指定,通常由编译器自动计算
  • 空间管理
    • 由 FreeRTOS 内核自动控制,无需程序员关注
  • 分配方式
    • 任务栈的分配由 FreeRTOS 内核自动控制,无需程序员手动分配
  • 分配效率
    • 任务栈的分配效率较高,由编译器在编译时确定分配大小