mirror of
https://github.com/HEYAHONG/HCppBox.git
synced 2025-05-09 00:21:37 +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
设置相应的锁(只需要设置一次),否则可能工作异常。