zoukankan      html  css  js  c++  java
  • 二、内存管理

    1、前言

    redis内存分配库支持jemalloc(Linux默认)、tcmalloc、libc(非Linux默认),编译方式参考Makefile。

    三种内存分配方式的比较待以后总结——>?

    2、adlist.h/adlist.c

    基本数据结构是带头结点的双向链表(非循环),调用依赖zmalloc.h/zmalloc.c

    typedef struct listIter {
        listNode *next;
        int direction;
    } listIter;
    
    typedef struct list {
        listNode *head;
        listNode *tail;
        void *(*dup)(void *ptr);
        void (*free)(void *ptr);
        int (*match)(void *ptr, void *key);
        unsigned long len;
    } list;

    list代表一个链表,dup/free/match代表对链表结点数据的操作函数,即对listNode中value的操作函数。dup代表对value的复制函数,free代表释放value内存的函数,match代表对value进行比较的函数。

    listIter代表一个迭代器,正向或反向遍历链表。

    3、zmalloc.h/zmalloc.c

    附注:两次宏操作,可以防止一次宏未对s中使用的宏进行替换,如下所示(好久没看,忘记是不是这个意思了?)

    #define __xstr(s) __str(s)
    #define __str(s) #s

    主要是宏定义,运行效率高。实际运行依赖于所选择的内存分配库和操作系统平台。

    未完待续。。。

  • 相关阅读:
    zoj 3599 Game 博弈论
    hdu 2486/2580 / poj 3922 A simple stone game 博弈论
    hdu 1517 A Multiplication Game 博弈论
    hdu 4407 Sum 容斥原理
    hdu 4686 Arc of Dream
    hdu 4588 Count The Carries
    hdu 4586 Play the Dice
    C#学习(5)
    C#学习(4)
    C#学习(3)
  • 原文地址:https://www.cnblogs.com/hujunfei/p/3393451.html
Copyright © 2011-2022 走看看