当前位置: 首页 > news >正文

[嵌入式系统-258]:创建一个新的线程时,需要为线程分配栈空间和线程控制块PCB, RT-Thread是如何为他们分配内存空间的?

在 RT-Thread 中,为线程分配栈空间和线程控制块(TCB)的方式取决于你选择的线程创建方法。RT-Thread 提供了动态和静态两种创建方式,它们在内存分配策略上有着本质的区别。

🚀 动态创建:从系统堆(Heap)分配

当你使用rt_thread_create()函数创建线程时,系统会自动从系统堆(Heap)中为线程控制块和栈空间分配内存。

这个过程可以分解为以下步骤:

  1. 分配 TCB 内存:系统首先调用内存分配函数(如rt_malloc),从堆中申请一块足够容纳线程控制块(struct rt_thread)的内存。
  2. 分配栈内存:紧接着,系统会根据你在创建函数中指定的stack_size参数,再次从堆中申请一块相应大小的内存,作为该线程的私有栈空间。
  3. 初始化:内存分配成功后,内核会对线程控制块和栈空间进行初始化,然后将线程加入到调度器中。
  • 优点:使用简单灵活,可以在运行时随时创建和销毁线程。
  • 缺点:依赖系统堆的配置,频繁创建和删除不同大小的线程可能会产生内存碎片。

🛠️ 静态创建:由用户预定义内存

当你使用rt_thread_init()函数初始化线程时,线程控制块和栈空间的内存都需要由开发者在代码中预先定义好

这个过程如下:

  1. 定义 TCB 变量:你需要先定义一个struct rt_thread类型的变量。
  2. 定义栈数组:同时,你需要定义一个足够大的数组(通常是rt_uint8_t类型)来作为线程的栈空间。
  3. 传入地址:最后,在调用rt_thread_init()时,将你定义的 TCB 变量的地址和栈数组的首地址作为参数传入。

这些预定义的变量和数组通常位于内存的 .bss 段 或 .data 段(即全局/静态存储区),它们的内存是在编译链接时就确定好的,不占用运行时的堆空间。

  • 优点内存分配稳定可靠,无碎片问题,实时性更好。
  • 缺点不够灵活,线程的数量和栈大小在编译时就已固定。

总结对比

下表清晰地展示了两种方式的内存分配来源:

表格

创建方式函数接口线程控制块 (TCB) 来源线程栈 (Stack) 来源
动态创建rt_thread_create系统堆 (Heap)系统堆 (Heap)
静态创建rt_thread_init用户预定义变量(全局/静态区)用户预定义数组(全局/静态区)
http://www.jsqmd.com/news/661602/

相关文章:

  • 2026深圳进出口经营权代办企业推荐排行榜单 - 品牌排行榜
  • 避坑指南:Cartographer保存二维地图时,为什么总在最后一步失败?
  • 大模型应用开发实战(18)——构建智能体(Agent)框架客户端
  • 为什么92%的AGI医疗POC项目死在第6个月?——来自梅奥诊所、华西医院联合复盘的11个断点修复模型
  • Python的函数使用详解
  • OpenMemories-Tweak:索尼相机隐藏功能解锁完整指南 - 终极破解工具详解
  • 别再乱用PCA了!盘点主成分分析在业务数据分析中的3个常见误区和避坑指南
  • 抖音批量下载神器:三分钟掌握高效素材获取技巧
  • 别再手动一张张导PDF了!用C#和.NET搞定AutoCAD批量打印的完整流程(附1:1比例设置代码)
  • VS Code + Keil Assistant插件实战:从创建STM32工程到编译下载的完整避坑指南
  • AI大模型知识图谱问答系统
  • VCE客户忠诚度如何,生产工艺先进吗,市场前景预测怎样解读 - 工业设备
  • 如何快速掌握PCILeech:面向初学者的完整内存取证工具指南
  • GNN实战:用PyTorch Geometric搞定社交网络节点分类(附Cora数据集完整代码)
  • Mac Mouse Fix深度解析:如何让普通鼠标在macOS上超越苹果触控板
  • 探讨有技术研发实力的泄氮阀品牌,哪家值得选 - 工业品网
  • 市面上质量好的钢结构防火涂料产品推荐榜 - 品牌排行榜
  • GLM-4.7-Flash步骤详解:supervisorctl管理glm_vllm与glm_ui服务全命令
  • 别再手动配网了!用安信可PB-02模组+PHY Mesh App,5分钟搞定蓝牙Mesh智能灯群控
  • 新160个crackMe算法分析-41-crackme.2.exe
  • 终极Hubot-Slack适配器指南:5步快速构建智能Slack机器人
  • 揭秘PPTAgent:AI如何用反思式智能重构演示文稿制作范式
  • 为什么TinyEditor是学习前端开发的完美入门工具?
  • 2026年北京电子助视器/视障电脑/盲人电脑公司推荐:北京视源科技有限公司,为盲人和低视力人群提供全方位解决方案 - 品牌推荐官
  • 终极图像转3D神器:用ImageToSTL轻松实现照片立体化
  • 告别杂乱!Win10文件资源管理器‘快速访问’与‘最近浏览’的保姆级清理与优化指南
  • Dubbo-samples高级特性:服务分组、版本控制与负载均衡
  • Cursor Free VIP:如何免费解锁Cursor AI的Pro功能?
  • 梳理安装快的列车接近预警系统选购要点和推荐品牌 - 工业推荐榜
  • OpenTelemetry Rust与Prometheus集成:实现高效指标监控的10个技巧