TIPS:动态线程和静态线程

RT-Thread中支持静态和动态两种定义方式。用线程来举例的话,rt_thread_init对应静态定义方式,rt_thread_create对应动态定义方式。

使用静态定义方式时,必须先定义静态的线程控制块,并且定义好堆栈空间,然后调用rt_thread_init来完成线程的初始化工作。采用这种方式,线程控制块和堆栈占用的内存会放在RW段,这段空间在编译时就已经确定,它不是可以动态分配的,所以不能被释放,而只能使用rt_thread_detach函数将该线程控制块从对象管理器中脱离。 使用动态定义方式rt_thread_create时,RT-Thread会动态申请线程控制块和堆栈空间。在编译时,编译器是不会感知到这段空间的,只有在程序运行时,RT-Thread才会从系统堆中申请分配这段内存空间,当不需要使用该线程时,调用rt_thread_delete函数就会将这段申请的内存空间重新释放到内存堆中。

这两种方式各有利弊,静态定义方式会占用RW/ZI空间,但是不需要动态分配内存,运行时效率较高,实时性较好。 动态方式不会占用额外的RW/ZI空间,占用空间小,但是运行时需要动态分配内存,效率没有静态方式高。

总的来说,这两种方式就是空间和时间效率的平衡,可以根据实际环境需求选择采用具体的分配方式

转载于:https://blog.51cto.com/svoday/1352865

RTT 动态线程和静态线程相关推荐

  1. RTX5 | 线程管理01 - 创建线程(静态堆栈方式)

    文章目录 一.前言 二.代码 2.1.main.h 2.1.main.c 三.DEBUG 四.细节补充 4.1.使用静态堆栈方式创建的线程只占用一点点RTX5上的内存 4.2.通过RTX RTOS窗口 ...

  2. 【Android 逆向】Android 进程注入工具开发 ( 远程进程注入动态库文件操作 | 注入动态库 加载 业务动态库 | 业务动态库启动 | pthread_create 线程开发 )

    文章目录 前言 一.加载 libnattive.so 动态库 二. libnattive.so 动态库启动 三. pthread_create 线程开发 四. 线程执行函数 前言 libbridge. ...

  3. java 静态线程_Java线程类静态本机void yield()方法(带示例)

    线程类静态本机无效 yield()软件包java.lang.Thread.yield()中提供了此方法. yield()方法表示停止当前正在执行的线程,并为其他优先级相同的等待线程提供机会. 如果没有 ...

  4. java 动态线程池_线程池的参数动态调整

    经典面试题 这次的文章还是绕回了我写的第三篇原创文章<有的线程它死了,于是它变成一道面试题>中留下的几个问题: 哎,兜兜转转,走走停停.天道好轮回,苍天饶过谁? 在这篇文章中我主要回答上面 ...

  5. 今天我们来聊一个比较实用的话题,动态可监控的线程池实践,全新开源项目

    大家好,今天我们来聊一个比较实用的话题,动态可监控的线程池实践,全新开源项目(DynamicTp)地址在下方,欢迎star交流学习. 项目地址 gitee地址:gitee.com/yanhom/dyn ...

  6. linux 修改最大线程,Linux ulimit跟动态修改MySQL最大线程数限制

    Linux ulimit和动态修改MySQL最大线程数限制 ulimit是限制进程对资源的使用,根据摩尔定律,高配的硬件现下也差不多白菜价 但软件资源限制变化不大,特别是process/file,分别 ...

  7. Linux中的动态库和静态库(.a/.la/.so/.o)

    为什么80%的码农都做不了架构师?>>>    Linux中的动态库和静态库(.a/.la/.so/.o) Linux中的动态库和静态库(.a/.la/.so/.o) C/C++程序 ...

  8. PE学习(九)第九章:TLS 动态TLS与静态TLS

    第九章:线程局部存储 PEB,在NT中,该结构可以从进程空间的FS:[0x30]处找到,PEB描述的信息主要包括:进程状态.进程堆.PE映像信息等,其中Ldr记录了进程加载进内存的所有模块的基地址. ...

  9. Linux C :线程操作和线程同步的多线程并发编程

    在这之前可以先看看这边文章了解线程概念,信号量,条件变量,死锁.管程等概念 https://blog.csdn.net/superSmart_Dong/article/details/11666837 ...

最新文章

  1. Visual C++6.0安装教程(win10版)及“应用程序无法正常启动(0x0150002)”解决办法
  2. java自动猜测文件编码
  3. Linq 学习笔记(二)
  4. 数字的处理 :小数点四舍五入
  5. linux里怎样压缩文件,如何在Linux中解压缩文件
  6. 我今年挣了......
  7. 入门 | egg.js 入门之egg-jwt
  8. 多图片的合并(2种方式,可以设置间距)
  9. docker制作容器(待更新)
  10. OpenStack Queens版本Barbican项目介绍
  11. R语言建立ARIMA模型预测数据
  12. 财务总监的秘密:不用代码和Excel,10分钟做出高大上财务分析
  13. 最新稳定短视频去水印免费解析API接口分享
  14. linux查看内存使用情况top详解
  15. revel MySQL_Go语言revel环境搭建
  16. zxing生成带logo的二维码
  17. mysql 查看版本的几种方法
  18. 小程序前端view内容重叠问题
  19. EA周报 | Libra将与支付宝微信展开竞争;Google终止中国版搜索引擎;滴滴柳青:顺风车目前不能上线是因为害怕...
  20. “word在试图打开文件时遇到错误”解决办法,亲测可用

热门文章

  1. 6_分布式训练框架Horovod使用(20190111)
  2. Scikit-learn使用总结
  3. php语法大全下载,PHP下载文件
  4. rocketmq中consumer设计与实现
  5. 「Vue」vue生命周期
  6. mysql中文查询问题
  7. 【洛谷3648】[APIO2014] 序列分割(斜率优化DP)
  8. 洛谷 [P2590] 树的统计
  9. Python的numpy库中rand(),randn(),randint(),random_integers()的使用
  10. PHP CURL 中文说明