-
堆区(Heap):
- 由程序员分配和释放,若程序员不释放,程序结束时可能由操作系统回收。
- 用于存储程序运行时动态申请的数据。在FreeRTOS中,堆为任务提供了动态内存的管理机制,每个任务可以有自己的堆。
-
栈区(Stack):
- 由编译器自动分配和释放,存放函数的参数值、局部变量的值等。
- 栈是一种后进先出(LIFO)的数据结构,在计算机系统中主要用于存储函数调用信息、局部变量以及程序执行过程中的临时数据。在FreeRTOS中,每个任务都有自己的栈。
-
全局区(静态区)(Static/Global):
- 存储全局变量和静态变量。
- 全局区被进一步细分为两块:一块是BSS,存储初始化为0和未经初始化的全局变量或静态变量;另一块是DATA,存储初始化不为0的全局变量和静态变量。这样做节省了静态区占用FLASH的空间。
-
文字常量区:
- 用于存储常量字符串。
- 程序结束后,由系统释放该区域的内存。
-
程序代码区:
- 存放函数体的二进制代码。
- 这是程序执行时不可或缺的部分,包含了程序的所有指令。
这些内存区域共同协作,支持程序的正常运行。每个区域都有其特定的用途和生命周期,由编译器和操作系统共同管理。在编写程序时,了解这些内存区域的特点和作用,助于更好地管理内存资源,提高程序的性能和稳定性。