PostgreSQL的内存管理策略(1)

原创 2006年06月22日 09:42:00
作为一个大的系统软件,如果避免内存泄露(memory leakage)是系统实现所面对的关键问题之一,PostgreSQL利用MemoryContext这个概念来解决这个问题,先来看看几个数据结构的定义:
注:在PostgreSQL的代码中,一般struct会以名字加上后缀“Data”,而该struct的指针就是该名字。
typedef struct MemoryContextMethods
{
    void       *(*alloc) (MemoryContext context, Size size);
    /* call this free_p in case someone #define's free() */
    void        (*free_p) (MemoryContext context, void *pointer);
    void       *(*realloc) (MemoryContext context, void *pointer, Size size);
    void        (*init) (MemoryContext context);
    void        (*reset) (MemoryContext context);
    void        (*delete) (MemoryContext context);
    Size        (*get_chunk_space) (MemoryContext context, void *pointer);
    bool        (*is_empty) (MemoryContext context);
    void        (*stats) (MemoryContext context);
#ifdef MEMORY_CONTEXT_CHECKING
    void        (*check) (MemoryContext context);
#endif
} MemoryContextMethods;
 
typedef struct MemoryContextData
{
    NodeTag     type;                   /* identifies exact kind of context */
    MemoryContextMethods *methods;      /* virtual function table */
    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) */
} MemoryContextData;
PostgreSQL对它的注释是“A logical context in which memory allocations occur”,即它是一个内存分配的逻辑上下文,类似于C++中的虚拟类,对它有很多的实现方法,目前在PostgreSQL中,只有AllocSetContext一种。从MemoryContextData的结构我们很容易看到,它是把每个内存上下文组织成一棵树,每个内存上下文有一个名字和一系列内存空间操作方法,这一整套操作方法的申明是在结构MemoryContextMethods中给出。
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

@property的内存管理策略&copy属性修饰符解惑

当我们在做开发时, 一定会用到@property这个修饰符. @property 的本质正如以下这条公式: @property = ivar + getter + setter; “属性” (p...

ARC & MRC下string内存管理策略探究

下面就让我们一起看看NSString和NSMutableString在MRC下执行retain,copy,mutableCopy,以及ARC下不同的修饰__weak, __strong修饰赋值究竟发生...

Android内存管理策略的优化

一、Android内存管理策略 1.Backing Swap (优先执行Compcache,不能满足要求时再启用SWAP) 2.Compcache (压缩缓存,消耗CPU性能,比较费电...

ARC & MRC下string内存管理策略探究

下面就让我们一起看看NSString和NSMutableString在MRC下执行retain,copy,mutableCopy,以及ARC下不同的修饰__weak, __strong修饰赋值究竟发生...

iOS 内存管理策略

内存管理策略(memory Management Policy)     NSObject protocol中定义的的方法和标准命名惯例一起提供了一个引用计数环境,内存管理的基本模式处于这个环境中。...

IOS内存管理策略(Memory Management Policy)

基本model用于内存管理在一个采用引用计数的环境是由方法组合定义的协议和标准方法NSObject命名约定。这个NSObject类还定义了一个方法,dealloc,这是调用一个对象时自动销毁。 ...

Android内存管理策略的优化

一、 Android 内存管理策略 1.Backing Swap (优先执行Compcache,不能满足要求时再启用SWAP)  2.Compcache (压缩缓存,消耗CPU性能,比较费电)...

OSG的内存管理策略

OSG和OpenGL的主要区别之一是OSG提供了组织空间场景的功能。OSG把空间场景和场景中的所有物体都组织在一棵树下。根节点代表整个场景,由根节点出发可以遍历场景中的所有物体。这个实现很简单了,如果...

Android内存管理策略的优化

Android内存管理策略的优化 一、Android内存管理策略 1.Backing Swap (优先执行Compcache,不能满足要求时再启用SWAP) 2.Compcache (压...
  • zyphio
  • zyphio
  • 2011-08-27 21:28
  • 3491
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)