前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于Memory Pool

关于Memory Pool

作者头像
Taishan3721
发布2022-06-30 18:57:18
2330
发布2022-06-30 18:57:18
举报
文章被收录于专栏:这里只有VxWorks这里只有VxWorks

VxWorks在Memory Partition的基础上,提供了一种适用于消息传递系统、数据库等场景的机制 - Memory Pool。其特点如下:

  • 提供固定长度的内存块
  • 快速高效
  • 减少碎片
  • 内存块数量支持自动扩展和手动扩展
  • 可以在ISR里申请/释放(特定情况下)
代码语言:javascript
复制
POOL_ID poolCreate
    (
    char   *pName,
    size_t  itmSize,
    size_t  alignment,
    ULONG   initCnt,
    ULONG   incrCnt,
    PART_ID partId,
    ULONG   options
    );
ULONG poolBlockAdd(POOL_ID poolId, void *pBlock, size_t size);
STATUS poolDelete(POOL_ID poolId, BOOL force);

poolCreate()用于创建一个Pool

  • pName - 可选,供User使用
  • itmSize - 每个内存块的字节数
  • alignment - 每个内存块的对齐位置,必须是2的幂;且不低于每个Arch最小值,例如x86是8,x64是16,但可以直接用0
  • initCnt - 内存块数量的初始值,可以为0
  • incrCnt - 内存块自动扩展时的数量,为0时表示不支持自动扩展
  • partId - 底层的Memory Partition ID,为NULL时表示用Heap
  • options -
    • POOL_THREAD_SAFE - 使能多任务互斥保护;否则需要User自行保护,但可在ISR中使用;
    • POOL_CHECK_ITEM - 释放时验证内存块的有效性

poolBlockAdd()将pBlock位置的size个字节加入poolId指向的Memory Pool。函数返回值表示加入的内存块数量

poolDelete(poolId, FALSE)删除完全空闲的poolId;poolDelete(poolId, TRUE)删除任意状态的poolId

代码语言:javascript
复制
void *poolItemGet(POOL_ID poolId);
STATUS poolItemReturn(POOL_ID poolId, void *pItem);

poolItemGet()从poolId中申请一块内存

poolItemReturn()将内存块pItem释放到poolId中

代码语言:javascript
复制
STATUS poolIncrementSet(POOL_ID poolId, ULONG incrCnt);
ULONG poolIncrementGet(POOL_ID poolId);
STATUS poolUnusedBlocksFree(POOL_ID poolId);

poolIncrementSet()设置poolId内存块自动扩展时的数量

poolIncrementGet()读取poolId内存块自动扩展时的数量

poolUnusedBlocksFree()当poolId的自动扩展的内存区域完全空闲时,将其释放掉,可以节省内存

代码语言:javascript
复制
ULONG poolTotalCount(POOL_ID poolId);
ULONG poolFreeCount(POOL_ID poolId);

poolTotalCount()读取poolId中所有内存块的数量

poolFreeCount()读取poolId中空闲内存块的数量

跑个例子

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 这里只有VxWorks 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档