2025-04-30 12:19:18 +08:00
..
2025-04-30 12:19:18 +08:00
2025-04-30 12:19:18 +08:00

说明

本组件主要用于实现内存管理。

组件

hmemoryheap

本组件主要用于实现一个简易内存堆。在操作系统不提供动态内存分配时使用。

可管理的内存参数如下:

项目 值(字节) 经典值对齐为4,32位系统
可管理的最大内存字节数 2^31 - HMEMORYHEAP_ALIGNED_SIZE 0x7FFF FFFC Bytes
可管理的最小内存字节数(无法分配任何内存,仅供创建堆) sizeof(hmemoryheap_pool_block_t)+sizeof(hmemoryheap_pool_t) 32 Bytes
推荐的最小内存字节数 256 Bytes
每分配一个指针额外消耗的最小内存 sizeof(hmemoryheap_pool_block_t) 4 Bytes
每分配一个指针额外消耗的最大内存 sizeof(hmemoryheap_pool_block_t)*2+HMEMORYHEAP_ALIGNED_SIZE-1 11 Bytes

可配置的宏定义如下:

宏定义 说明 备注
HMEMORYHEAP_ALIGNED_SIZE 对齐大小。默认为指针大小。 需根据对应架构的要求修改。
HMEMORYHEAP_MAGIC_NUMBER 魔数用作标记是否初始化。默认为0xcccc55aa。
HMEMORYHEAP_PTR_SIZE 指针大小。默认不定义(默认为4)。 对于64位系统一定要指定为8。
HMEMORYHEAP_DEFAULT_POOL_SIZE 默认堆大小。至少256字节。默认不定义。
USING_HMEMORYHEAP 启用默认堆(默认256字节)并将其作为本工具箱默认内存分配函数。默认不定义

hobject

本组件主要用于实现一些基于C的对象的相关操作。

本组件主要用于事件处理中数据的传递。

利用C语言结构体地址与结构体第一个成员的地址相同的特性,可实现类似于C++类的继承的特性,不过C语言只能实现单继承,且没有权限控制。

对于带管理的对象,添加了实现类似于C++的析构功能的回调函数指针,带管理的对象在释放数据前,应调用hobject_cleanup调用清理函数后再使用内存释放函数(如free)释放内存。

注意:对于结构体对象(包括带管理的结构体对象),当架构(或者操作系统)不支持非对齐访问且对齐字节大于4字节时,可能出现异常。

hringbuf

本组件主要提供简易环形缓冲区。

环形缓冲区常用来做FIFO,对数据做一些缓存。

常见的缓冲区(如数组)可通过hringbuf_get函数转化为环形缓冲区。

当运行环境不是无操作系统环境时或者需要设置用户指针时,需使用hringbuf_set_lock设置相应的锁(只需要设置一次),否则可能工作异常。