嵌入式学习小组
直播中

张帆

7年用户 224经验值
私信 关注

Thread被中止之后所引用实例里的内存还可用吗?

线程A运行的实例是下面的函数:
void StartAppTask(void const * argument){
  char buf[2048];
  for(;;){
     osDelay(16);
  }
}
问题是: 如果这个线程被中止后, buf是否也会被回收吗?
谢谢大家参与这个主题.

回帖(6)

陈具松

2020-7-22 13:34:24
看你所用的RTOS是否支持这种特性。
比如RT-Thread可以支持,但必须得是动态线程,这样栈是malloc出来的。
不然静态线程的栈是数组,是没法回收的。
不过,在栈里面开这么大数组,一般是no zuo no die的事,栈空间都用户指定的,你得很专业的评估应用程序所用的栈大小来设置合理的栈空间。
举报

张萍

2020-7-22 13:53:31
Task A运行的实例是下面的函数:
void StartAppTask(void const * argument){
  char buf[2048] = { "can be printedrn" };
  pBuf = buf;  /*pBuf is a global pointer defined somewhere*/
  for(;;){
     osDelay(16);
  }
}
通过 Task B 创建/终止Task A. 测试Task A被终止后, Task A实例中的资源是否被系统回收.
测试方法:
使用一全局指针pBuf在Task A指向buf, 并在Task B中不断打印这个指针指向. 当创建Task A后有打印输出, 终止Task A后, 仍有打印输出.
上面测试至少说明, pBuf指向为非空, 是不是也说明char buf[]在Task A被终止后并没有被回收?
举报

刘恩彤

2020-7-22 14:10:48
你这个不会回收
回收用malloc,使用完free,就可以实现
举报

傅琦

2020-7-22 14:17:32
你所说的Thread被中止,其实指的是任务删除吧?任务删除后,任务里面的所有临时变量,包括数组,一般都会***作系统回收,起码FreeRTOS就是这样
举报

更多回帖

发帖
×
20
完善资料,
赚取积分