首先从简单出发,理解内存上下文(MemoryContext)相关的内容.
系统中内存的分配操作都是在各种语义的内存上下文MemoryContext中进行,因此可以很轻松的通过内存上下文释放其中的所有的相关内存空间,而不用费心去释放每一块空间,这样内存的分配和释放更加快捷和可靠!这种机制借鉴了操作系统的一些概念。操作系统中进程可以其执行环境中执行而不用相互影响。
postgresql 中通过MemoryContextCreate函数 来初始化一个内存上下文。下面的实例为两个内存上下文的初始化。
#include <stdio.h>
#include <stdlib.h>
typedef struct MemoryContextData *MemoryContext;
typedef struct MemoryContextData
{
MemoryContext parent; /* NULL if no parent (toplevel context) */
MemoryContext firstchild; /* head of linked list of children */
MemoryContext nextchild; /* next child of same parent */
char *name; /* context name (just for debugging) */
char isReset; /* T = no space alloced since last reset */
} MemoryContextData;
/*
* name : MemoryContextCreate
* function : 初始化内存上下文
* parameter : name -- 内存上下文的名称
parent -- 该内存上下文的父节点
*/