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

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

    未完待续。。。

  • 相关阅读:
    LINUX学习笔记day2
    android 获取正在运行的服务
    android小部件
    android开发_国外论坛
    取消线程
    AlarmManager的使用
    PendingIntent
    SharedPreferences 的使用
    流量监听
    android 异常-access to constructor not allowed
  • 原文地址:https://www.cnblogs.com/hujunfei/p/3393451.html
Copyright © 2011-2022 走看看