完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
线程A运行的实例是下面的函数:
void StartAppTask(void const * argument){ char buf[2048]; for(;;){ osDelay(16); } } 问题是: 如果这个线程被中止后, buf是否也会被回收吗? 谢谢大家参与这个主题. |
|
相关推荐
6个回答
|
|
|
看你所用的RTOS是否支持这种特性。
比如RT-Thread可以支持,但必须得是动态线程,这样栈是malloc出来的。 不然静态线程的栈是数组,是没法回收的。 不过,在栈里面开这么大数组,一般是no zuo no die的事,栈空间都用户指定的,你得很专业的评估应用程序所用的栈大小来设置合理的栈空间。 |
|
|
|
|
|
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被终止后并没有被回收? |
|
|
|
|
|
|
|
|
|
|
|
你所说的Thread被中止,其实指的是任务删除吧?任务删除后,任务里面的所有临时变量,包括数组,一般都会***作系统回收,起码FreeRTOS就是这样
|
|
|
|
|
|
@FreeRTOS, 谢谢参与进来.
Thread被中止指的是运行了 osThreadTerminate(TaskHandleID); 然而我有不同的观点. take below code as a example: void StartAppTask(void const * argument){ char buf[2048] = { "can be printedrn" }; for(;;){ osDelay(16); } } 我的观点是, 上面这个函数只要运行, 就不可退出 >> 既然不可退出, char buf[]就不会被释放. "不可退出" != "可被执行", "不被执行" != "已经退出" |
|
|
|
|
|
你举的任务例子表面上看不能退出,实际上还是可以的,你可以在其他任务删除该任务,内存一样会被回收
|
|
|
|
|
只有小组成员才能发言,加入小组>>
1018 浏览 1 评论
1849 浏览 0 评论
1830 浏览 1 评论
3254 浏览 5 评论
3581 浏览 9 评论
1021浏览 1评论
1850浏览 1评论
如何知道嵌入式电子控制单元 (ECU) 中的RAM使用情况?
1360浏览 1评论
1852浏览 0评论
1178浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 22:57 , Processed in 0.790094 second(s), Total 84, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
3409