VxWorks在Memory Partition的基础上,提供了一种适用于消息传递系统、数据库等场景的机制 - Memory Pool。其特点如下:
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
poolBlockAdd()将pBlock位置的size个字节加入poolId指向的Memory Pool。函数返回值表示加入的内存块数量
poolDelete(poolId, FALSE)删除完全空闲的poolId;poolDelete(poolId, TRUE)删除任意状态的poolId
void *poolItemGet(POOL_ID poolId);
STATUS poolItemReturn(POOL_ID poolId, void *pItem);
poolItemGet()从poolId中申请一块内存
poolItemReturn()将内存块pItem释放到poolId中
STATUS poolIncrementSet(POOL_ID poolId, ULONG incrCnt);
ULONG poolIncrementGet(POOL_ID poolId);
STATUS poolUnusedBlocksFree(POOL_ID poolId);
poolIncrementSet()设置poolId内存块自动扩展时的数量
poolIncrementGet()读取poolId内存块自动扩展时的数量
poolUnusedBlocksFree()当poolId的自动扩展的内存区域完全空闲时,将其释放掉,可以节省内存
ULONG poolTotalCount(POOL_ID poolId);
ULONG poolFreeCount(POOL_ID poolId);
poolTotalCount()读取poolId中所有内存块的数量
poolFreeCount()读取poolId中空闲内存块的数量
跑个例子