【计算机基础】-48-Slab与Memory Pool可以共存吗?他们的API函数相同吗?代码示例
✅Slab 与 Memory Pool 可以共存且它们的 API 完全不同、用途互补。它们是 RT-Thread 中两种独立的内存管理机制分别用于内核对象缓存和用户自定义固定大小内存池。一、核心对比特性Slab AllocatorMemory Pool (rt_mp_t)用途内核自动管理 TCB、信号量等对象用户手动创建/管理固定大小内存池API无直接用户 API内核自动调用rt_mp_create(),rt_mp_alloc(),rt_mp_free()是否共存✅ 是完全独立✅ 是ISR 安全⚠️ 间接支持通过内核对象✅ 直接支持rt_mp_alloc(..., RT_WAITING_NO)内存来源系统堆heap或静态内存用户指定堆 or 静态数组关键区别Slab 是“内核对象池”用户不直接操作Memory Pool 是“用户内存池”用户显式创建和使用。二、API 对比完全不同✅ Slab Allocator无用户级 API当你调用rt_thread_create()时内核自动从 Slab 分配 TCB用户无法直接“分配一个 slab 对象”。// 用户代码不涉及 slab API rt_thread_t tid rt_thread_create(t1, entry, RT_NULL, 512, 10, 10); // → 内部TCB 从 slab cache 分配若启用 RT_USING_SLAB✅ Memory Pool完整用户 APIrt_mp_t rt_mp_create(const char *name, rt_size_t block_size, rt_size_t block_total); void* rt_mp_alloc(rt_mp_t mp, rt_int32_t timeout); void rt_mp_free(void *block);三、共存示例同时使用 Slab 和 Memory Pool#include rtthread.h // 1. 启用 Slab用于内核对象 // rtconfig.h: // #define RT_USING_SLAB // 2. 创建用户 Memory Pool用于 ISR 数据包 static rt_mp_t packet_pool RT_NULL; int memory_init(void) { // 创建 64 字节 x 10 块的内存池 packet_pool rt_mp_create(pkt_pool, 64, 10); if (packet_pool RT_NULL) { rt_kprintf(Failed to create memory pool\n); return -1; } return 0; } INIT_APP_EXPORT(memory_init); // 3. ISR 中使用 Memory Pool安全 void uart_isr(void) { void *buf rt_mp_alloc(packet_pool, RT_WAITING_NO); // 不阻塞 if (buf) { uart_read(buf, 64); rt_mb_send(data_mb, (rt_ubase_t)buf); // 发给线程处理 } } // 4. 线程处理数据并释放 void data_thread(void *param) { rt_ubase_t msg; while (1) { if (rt_mb_recv(data_mb, msg, RT_WAITING_FOREVER) RT_EOK) { void *buf (void *)msg; process_data(buf); rt_mp_free(buf); // 归还到 Memory Pool } } } // 5. 同时创建多个线程TCB 由 Slab 管理 void create_workers(void) { // 这些 TCB 由 Slab 分配零碎片、高速 for (int i 0; i 5; i) { char name[8]; rt_sprintf(name, w%d, i); rt_thread_t t rt_thread_create(name, worker_entry, RT_NULL, 512, 20, 10); rt_thread_startup(t); } }✅运行时行为rt_thread_create()→ TCB 从Slab分配rt_mp_alloc()→ 内存块从Memory Pool分配两者互不影响完美共存。四、内存布局示意--------------------- | System Heap | ← Small Memory / Buddy 管理 | | | ----------------- | | | Slab Cache | | ← Slab 从 heap 切出一块管理 TCB | | [TCB][TCB][...] | | | ----------------- | | | | ----------------- | | | Memory Pool | | ← rt_mp_create() 从 heap 或静态内存分配 | | [64][64][64]... | | | ----------------- | --------------------- 注意Memory Pool 也可以从静态数组创建不占用 heapstatic uint8_t mp_buffer[64 * 10]; rt_mp_t mp rt_mp_create_static(mp, 64, 10, mp_buffer);五、何时用 Slab何时用 Memory Pool场景推荐机制创建/删除线程、信号量、定时器✅Slab内核自动优化ISR 中分配内存如网络包、传感器帧✅Memory PoolISR-safe用户自定义固定大小对象池✅Memory Pool减少内核对象碎片✅Slab✅ 总结问题答案Slab 与 Memory Pool 能共存吗✅能且推荐共存API 相同吗❌完全不同Slab 无用户 APIMemory Pool 有完整 APISlab内核分配内核对象时使用没有分配给用户使用。是否冲突❌不冲突Slab 管内核对象Memory Pool 管用户数据一句话“Slab 是内核的私有对象池Memory Pool 是用户的公有内存池——各司其职和谐共存。”合理组合两者可构建高性能、低碎片、实时可靠的嵌入式系统。

相关新闻

【计算机基础】-47-Buddy和Small Memory使用相同的API rt_malloc(), 他们能并存吗?如何区分?

【计算机基础】-47-Buddy和Small Memory使用相同的API rt_malloc(), 他们能并存吗?如何区分?

不能并存。RT-Thread 中 Buddy System 和 Small Memory 是互斥的两种堆内存管理算法,它们共享相同的 API(rt_malloc/rt_free),但只能启用其中一种。✅ 核心结论:Buddy 和 Small Memory 使用相同的 rt_malloc() 接口&am…

2026/5/17 4:34:55 阅读更多 →
赶deadline必备!千笔·专业论文写作工具,本科生专属AI论文网站

赶deadline必备!千笔·专业论文写作工具,本科生专属AI论文网站

你是否曾在论文写作中感到无从下手?选题犹豫不决、框架混乱、文献查找困难、查重率居高不下,甚至格式都让人头疼。面对这些学术路上的“拦路虎”,很多同学都感到力不从心。别再让论文成为你的噩梦,千笔AI——专为本科生打造的智能…

2026/5/17 4:34:54 阅读更多 →
语言、开发语言程序设计语言--SMP(软件制作平台)语言基础知识之六十一

语言、开发语言程序设计语言--SMP(软件制作平台)语言基础知识之六十一

程序设计语言(简称语言、开发语言)是人与计算机进行交流的工具,用于编写计算机程序,使计算机能够按照人的意图执行特定任务。它是一套定义计算机程序的语法规则系统,既能被人类理解,也能通过编译或解释转化…

2026/7/4 12:16:41 阅读更多 →

最新新闻

OpenCV实战:从零搭建实时人脸识别系统,附完整代码与避坑指南

OpenCV实战:从零搭建实时人脸识别系统,附完整代码与避坑指南

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 最近在做一个智能门禁的小项目,需要用到实时人脸识别。本以为用现成的API就能搞定,结果发现对本地化部署、成本…

2026/7/6 7:21:08 阅读更多 →
明日方舟智能助手实战指南:5个核心技巧告别手动肝日常

明日方舟智能助手实战指南:5个核心技巧告别手动肝日常

明日方舟智能助手实战指南:5个核心技巧告别手动肝日常 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: https://git…

2026/7/6 7:21:08 阅读更多 →
XTR116与STM32的4-20mA电流环工业应用设计

XTR116与STM32的4-20mA电流环工业应用设计

1. 4-20mA电流环技术背景与XTR116特性解析工业现场最头疼的问题莫过于长距离信号传输时的干扰和衰减。我在化工厂做自动化改造时,曾遇到过传感器信号传输300米后完全失真的情况。这时候4-20mA电流环的优势就凸显出来了——电流信号对线路电阻不敏感,抗干…

2026/7/6 7:21:08 阅读更多 →
PgBouncer 的 Transaction 模式详解

PgBouncer 的 Transaction 模式详解

1. 什么是 PgBouncer?PgBouncer 是一个轻量级的 PostgreSQL 连接池工具,用于管理和复用数据库连接,从而减少频繁建立和断开连接的开销,提升数据库性能和可扩展性。2. PgBouncer 的三种连接池模式PgBouncer 支持三种主要的连接池模…

2026/7/6 7:19:07 阅读更多 →
STM32与171010550实现高效DC-DC降压转换器设计

STM32与171010550实现高效DC-DC降压转换器设计

1. 项目背景与硬件选型解析 在电力电子领域,DC-DC降压转换器(Buck Converter)是最基础也是应用最广泛的拓扑结构之一。这个项目选择了171010550电源管理IC与STM32F373VC微控制器的组合方案,这种搭配在工业电源设计中颇具代表性。 …

2026/7/6 7:19:07 阅读更多 →
现代简约客餐厅一体,小户型显大方案

现代简约客餐厅一体,小户型显大方案

现代简约客餐厅一体,小户型显大方案 近年来,随着城市居住空间日益紧凑,郑州本地越来越多的中产家庭在装修时倾向于选择“客餐厅一体化”布局,尤其在80-120㎡的小户型中,通过现代简约风格实现视觉扩容、功能融合与动线优…

2026/7/6 7:17:07 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻