• postgresql共享内存的三个结构体


    本文原创为freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/16105797

    postgresql的共享内存维护主要依靠以下三个结构体:

    HHDR:

    typedef struct hashhdr {
        long bsize;			/* Bucket/Page Size */
        long bshift;		/* Bucket shift */
        long dsize;			/* Directory Size */
        long ssize;			/* Segment Size */
        long sshift;		/* Segment shift */
        long max_bucket;		/* ID of Maximum bucket in use */
        long high_mask;		/* Mask to modulo into entire table */
        long low_mask;		/* Mask to modulo into lower half of table */
        long ffactor;		/* Fill factor */
        long nkeys;			/* Number of keys in hash table */
        long nsegs;			/* Number of allocated segments */
        long keysize;		/* hash key length in bytes */
        long datasize;		/* elem data length in bytes */
        long max_dsize;		/* 'dsize' limit if directory is fixed size */ 
        BUCKET_INDEX freeBucketIndex;
        /* index of first free bucket */
    #ifdef HASH_STATISTICS
        long accesses;
        long collisions;
    #endif
    } HHDR;

    这个结构体定义了hash结构的目录。

    HTAB:

    typedef struct htab {
        HHDR	*hctl;		/* shared control information */
        long 	(*hash)(); 	/* Hash Function */
        char 	*segbase; 	/* segment base address for 
    				 * calculating pointer values 
    				 */
        SEG_OFFSET	*dir;		/* 'directory' of segm starts */
        long 	*(*alloc)(); 	/* memory allocator 
    				 * (long * for alignment reasons)
    				 */
    
    } HTAB;


    这个结构体定义了hash table(动态、静态属性)。

    HASHCTL:

    typedef struct hashctl {
        long bsize;		/* Bucket Size */
        long ssize;		/* Segment Size */
        long dsize;		/* Dirsize Size */
        long ffactor;	/* Fill factor */
        long (*hash)();	/* Hash Function */
        long keysize;	/* hash key length in bytes */
        long datasize;	/* elem data length in bytes */
        long max_size;	/* limit to dsize if directory size is limited */
        long *segbase;	/* base for calculating bucket + seg ptrs */
        long * (*alloc)();	/* memory allocation function */
        long *dir;		/* directory if allocated already */
        long *hctl;		/* location of header information in shd mem */
    } HASHCTL;

    其中,HHDR是HTAB的一个元素。


     



     

  • 相关阅读:
    asp.net 框架接触(2)
    解决:C++ 中 main函数 wmain函数 _tmain函数 WinMain函数 wWInMain函数 _tWinMain函数的区别
    实现:创建/复制/移动文件API
    实现:类模板的数组类封装
    python3 解析shodan_json数据
    实现:API实现创建用户并且添加至管理员
    学习:类模板
    网展cms后台任意文件删除和sql注入
    选择排序
    实现:函数模板实现不同数据类型数组进行排序
  • 原文地址:https://www.cnblogs.com/pangblog/p/3424105.html
Copyright © 2020-2023  润新知