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空间,但是不需要动态分配内存,运行时效率高。
动态方式不会占用额外的RW空间,占用空间小,但是运行时需要动态分配内存,效率没有静态方式高。
总的来说,这两种方式就是空间和时间效率的平衡,可以根据实际环境需求选择采用具体的分配方式。

最新文章

  1. codevs4927 线段树练习5
  2. 低功耗蓝牙4.0BLE编程-nrf51822开发(7)-SDP服务发现协议
  3. 15、SQL基础整理(视图)
  4. 游戏被App Store下架 如何快速上线?
  5. MySQL主从修复
  6. MUSIC算法学习笔记
  7. HDU 5637 Transform 搜索
  8. 如何在myeclipse8.5中使用maven
  9. c++ cout 保留小数点位
  10. Angular2 + NativeScript 跨平台开发笔记(一)
  11. 转载 Deep learning:一(基础知识_1)
  12. pur-ftpd在ubuntu上的安装
  13. java 异常处理机制(java 编程思想)
  14. Android开发笔记---adb命令
  15. Reactor反应器模式 (epoll)
  16. 使用libcurl作为Http client
  17. css3属性兼容性
  18. razor使用注意点........
  19. memsql 多节点部署
  20. Spring 事务传播行为

热门文章

  1. java 串口通信实现流程
  2. 几个重要的开源视频会议SIP协议栈
  3. vue组件 $children,$refs,$parent的使用
  4. 深入理解计算机系统_3e 第十章家庭作业 CS:APP3e chapter 10 homework
  5. js 数组方法大集合,各方法是否改变原有的数组详解
  6. Struts2 In Action笔记_页面到动作的数据流入和流出
  7. 列表与特殊字符,div(新手HTMLL基础)
  8. 优化你的java代码性能
  9. ES6 Reflect使用笔记
  10. JS MarcoTasks MicroTasks