Mem5.c中,使用了21个函数,2种结构体来完成内存分配工作。各部分功能列表如下。
表4.4.1 结构体功能列表
| 编号 | 结构体名称 | 功能 |
|---|---|---|
| 1 | Mem5Link | 构成chunk双向链表 |
| 2 | Mem5Global | 用于存储mem5.c中的静态变量及其性能统计信息 |
表4.4.2 mem5.c函数功能列表
| 编号 | 函数名 | 功能 |
|---|---|---|
| 1 | static void memsys5Unlink(int i, int iLogsize) | 从双向循环链表中删除第i项chunk,该chunk位于mem5.aiFreelist[iLogsize]处 |
| 2 | static void memsys5Link(int i, int iLogsize) | 将 mem5.aPool[i] 位置的chunk, 插入到空闲链表mem5.aiFreelist[iLogsize]处 |
| 3 | static void memsys5Enter(void) | 对该内存分配器加互斥锁 |
| 4 | static void memsys5Leave | 解锁 |
| 5 | static int memsys5Size(void *p) | 返回一个以字节为单位的未分配的内存大小 |
| 6 | static int memsys5UnlinkFirst(int iLogsize) | 找到空闲链表中的第iLogSize项指向的链表中下标最小的那一项,返回这个下标 |
| 7 | static void *memsys5MallocUnsafe(int nByte) | 给用户分配n字节的空间,返回该空间的地址。 |
| 8 | static void memsys5FreeUnsafe(void *pOld) | 释放未分配内存,由pOld指针指向的zPool与szAtom的比值,得到要释放的内存块下标 |
| 9 | static void *memsys5Malloc(int nBytes) | 申请分配n字节的内存空间。 |
| 10 | static void memsys5Free(void *pPrior) | 释放*pPrior指向的内存空间。 |
| 11 | static void memsys5Realloc(void pPrior, int nBytes) | 重新分配*pPrior指向的内存空间大小为n字节。 |
| 12 | static int memsys5Roundup(int n) | 计算当前请求到下一个有效分配的大小。 |
| 13 | static int memsys5Log(int iValue) | 返回最接近iValue的2的幂 |
| 14 | static int memsys5Init(void *NotUsed) | 初始化该内存分配器。 |
| 15 | static void memsys5Shutdown(void *NotUsed) | 取消模块初始化设置。 |
| 16 | void sqlite3Memsys5Dump(const char *zFilename) | 将该内存分配器进行的操作写入日志文件。 |
| 17 | const sqlite3_mem_methods *sqlite3MemGetMemsys5(void) | 重新分配*pPrior指向的内存空间大小为n字节。 |
| 18 | int memsys3Init(void *NotUsed) | 初始化该内存分配器。 |
| 19 | void memsys3Shutdown(void *NotUsed) | 取消模块初始化设置。 |
| 20 | void sqlite3Memsys3Dump(const char *zFilename) | 将该内存分配器进行的操作写入日志文件。 |
| 21 | const sqlite3_mem_methods *sqlite3MemGetMemsys3(void) | 用于与外部链接。 |