SQlite源码分析

函数及结构体功能

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) 用于与外部链接。