栈和堆的区别、FreeRTOS 中的任务栈
01 堆和栈的概念
堆 | |
---|---|
功能 | 堆是一块用于动态分配内存的区域,用于存储程序运行时动态创建的对象。堆的大小可以在程序运行时动态调整。 |
特点 | 堆的分配和释放是由程序员手动控制的。堆的分配和释放顺序的任意的,不需要遵循先进先出的原则。堆的分配和释放需要显式的调用响应函数。 |
栈 | |
---|---|
功能 | 栈是一种用于存储局部变量和函数调用信息的数据结构。栈的大小在程序编译时确定,通常较小。 |
特点 | 栈的分配和释放是由编译器自动控制的。栈的分配和释放顺序遵循先进后出的原则。栈的分配和释放无需显式地调用函数,由编译器自动完成。 |
02 堆和栈的区别
堆 | 栈 | |
---|---|---|
分配方式 | 堆的分配是动态的,由程序员手动控制。堆的分配可以在任意时刻进行,不需要遵循特定的顺序。 | 栈的分配是静止的,由编译器自动控制。栈的分配在编译时确定,无法在运行时改变。 |
分配效率 | 堆的分配效率较低,需要在运行时进行动态分配和释放。 | 栈的分配效率较高,由编译器在编译时确定分配大小。 |
空间管理 | 堆的空间管理由程序员手动控制,需要注意内存泄漏和内存碎片的问题。 | 栈的空间管理由编译器自动控制,无需程序员关注。 |
03 FreeRTOS 中的任务栈
功能:FreeRTOS 中的任务栈用于存储任务的上下文信息,包括局部变量、函数调用信息等。
特点:
- 大小
- 任务栈的大小在创建任务时指定,通常由编译器自动计算
- 空间管理
- 由 FreeRTOS 内核自动控制,无需程序员关注
- 分配方式
- 任务栈的分配由 FreeRTOS 内核自动控制,无需程序员手动分配
- 分配效率
- 任务栈的分配效率较高,由编译器在编译时确定分配大小