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中给出。

cocos2d-x 源码分析 : Ref (CCObject) 源码分析 cocos2d-x内存管理策略

1.Ref,AutoreleasePool,PoolManager Ref中包含了一个叫referenceCount的引用计数,当一个Ref类的变量被new的时候,其referenceCount的引...

cocos2d-x 源码分析 : Ref (CCObject) 源码分析 cocos2d-x内存管理策略

源码版本来自3.x,转载请注明 cocos2d-x 源码分析总目录: http://blog.csdn.net/u011225840/article/details/31743129 ...

iOS内存管理策略和实践

转自hherima的博客 内存管理策略(memory Management Policy) NSObject protocol中定义的的方法和标准命名惯例一起提供了一个引用计数环境,内存管...

iOS 内存管理策略

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

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

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

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

前两天跟同事争论一个关于NSString执行copy操作以后是否会发生变化,两个人整了半天,最后写代码验证了一下,发现原来NSString操作没我们想的那么简单,下面就让我们一起看看NSString和...

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

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

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

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

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

当我们在做开发时, 一定会用到@property这个修饰符. @property 的本质正如以下这条公式: @property = ivar + getter + setter; “属性” (p...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PostgreSQL的内存管理策略(1)
举报原因:
原因补充:

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