堆内存管理 更多...
结构体 | |
struct | tagFreeBlock |
空闲块记录 更多... | |
struct | tagHeap |
堆管理器 更多... | |
宏定义 | |
#define | MSTR_IMP_SOURCES 1 |
类型定义 | |
typedef usize_t | heap_size_t |
堆的size | |
typedef struct tagFreeBlock | FreeBlock |
空闲块记录 | |
typedef struct tagHeap | Heap |
堆管理器 | |
函数 | |
static uptr_t | align_of (uptr_t beg, usize_t align) |
计算beg对齐到align字节的对齐地址 | |
static void | heap_free_impl (Heap *heap, void *mem) |
释放由堆分配器分配的内存 | |
static void | heap_init_impl (Heap *heap, uptr_t memory, usize_t memory_size) |
初始化堆 | |
static void | insert_free_block (const Heap *heap, FreeBlock *block) |
插入空闲块 | |
static void | insert_block_helper (const Heap *heap, FreeBlock *insert_pos, FreeBlock *insert_block) |
插入并尝试合并一个块 | |
static FreeBlock * | split_free_block (FreeBlock *block, heap_size_t alloc_size) |
分割空闲块 | |
static FreeBlock * | allocate_tactic (const Heap *heap, heap_size_t need_size) |
分配策略, 尝试找到 need_size 大小的 free block | |
static void * | heap_allocate_impl (Heap *heap, heap_size_t need_size, heap_size_t align) |
在堆中分配内存 | |
static void * | heap_re_allocate_impl (Heap *heap, void *old_ptr, heap_size_t need_size, heap_size_t old_size) |
在堆中重新分配内存 | |
mstr_heap_init_sym (iptr_t heap_memory, usize_t heap_size) | |
初始化堆分配器 | |
mstr_heap_allocate_sym (usize_t size, usize_t align) | |
尝试从堆中分配size大小的内存 | |
mstr_heap_re_allocate_sym (void *old_ptr, usize_t new_size, usize_t old_size) | |
尝试从堆中重新分配size大小的内存 | |
MSTR_EXPORT_API (void) | |
翻转字符串 | |
MSTR_EXPORT_API (usize_t) | |
取得自运行以来空闲内存最小的值 | |
mstr_heap_get_allocate_count (usize_t *alloc_count, usize_t *free_count) | |
取得分配器的统计数据 | |
mstr_heap_realloc_cpimp_sym (void *old_ptr, usize_t new_size, usize_t old_size) | |
由memcpy实现realloc | |
变量 | |
static Heap | global_heap |
全局的堆管理器 | |
堆内存管理
#define MSTR_IMP_SOURCES 1 |
typedef struct tagFreeBlock FreeBlock |
空闲块记录
typedef usize_t heap_size_t |
堆的size
计算beg对齐到align字节的对齐地址
[in] | beg | 起始地址 |
[in] | align | 需要对齐的字节数, 必须是2的整数幂 |
|
static |
分配策略, 尝试找到 need_size 大小的 free block
heap | 堆 |
need_size | 需要的大小 |
|
static |
在堆中分配内存
[in,out] | heap | 堆 |
[in] | need_size | 需要分配的大小 |
[in] | align | 要求的字节对齐 |
|
static |
释放由堆分配器分配的内存
[in,out] | heap | 堆 |
[in] | mem | 需要释放的内存区 |
初始化堆
[out] | heap | heap结构 |
[in] | memory | heap所占用的内存区 |
[in] | memory_size | heap所占用的内存区大小 |
|
static |
在堆中重新分配内存
[in,out] | heap | 堆 |
[in] | old_ptr | 以前的指针 |
[in] | need_size | 需要分配的大小 |
[in] | old_size | 以前的内存区大小, 可能用于数据拷贝 |
|
static |
插入并尝试合并一个块
插入空闲块
insert_block_helper
配合使用[in] | heap | heap |
[in,out] | block | 需要插入的空闲块 |
MSTR_EXPORT_API | ( | usize_t | ) |
取得自运行以来空闲内存最小的值
判断前导字符lead后面的字符长度, 前导字符包括在内
取得当前的空闲内存大小
MSTR_EXPORT_API | ( | void | ) |
翻转字符串
释放由 mstr_heap_allocate 分配的内存
释放一个字符串所占的内存
取得迭代器
翻转字符串, 不做任何其它处理
[in,out] | str | 需要翻转的字符串 |
[in,out] | str | 需要翻转的字符串 |
[out] | it | 迭代器输出 |
[in] | str | 原字符串 |
str | 字符串结构 |
取得分配器的统计数据
[out] | alloc_count | 分配次数 |
[out] | free_count | 释放次数 |
初始化堆分配器
[in] | heap_memory | 堆内存区 |
[in] | heap_size | 堆内存区的大小 |
尝试从堆中重新分配size大小的内存
[in] | old_ptr | 之前的ptr |
[in] | new_size | 需要分配的新大小 |
[in] | old_size | 之前的ptr的大小 |
由memcpy实现realloc
|
static |
分割空闲块
block | 需要划分的块 |
alloc_size | 分配大小 |
|
static |
全局的堆管理器