菜鸟学习redis-----内存管理之zmalloc函数

               redis有可能运行在不同的平台,所以它为了不同平台的差异(1)进行了封定义平台之间的差异, 把其他平台的函数定义为标准C函数比如#define realloc(ptr,size) je_realloc(ptr,size)  把Facebook平台的realloc定义为我们常用的realloc。

   void *zmalloc(size_t size); {  //开空间函数

         void *ptr = malloc( size + PREFIX_SIZE );//因为为了好管理,每次开辟内存都把内存大小存放在地址的起始,//PREFIX_SIZE的作用是存放这次开空间的强度的。                 if( !ptr ) 

                 zmalloc_oom_handler(size);//这个是报错函数的函数指针,报错函数把标准出错stderr重定义为文件,所以需要//刷新,然后abort改进程结束。   

            #ifdef HAVE_MALLOC_SIZE  //如果是非标准C

          update_zmalloc_stat_alloc(zmalloc_size(ptr)); //这个宏定义中if (_n&(sizeof(long)-1))作用是使开辟的空间为n为long整//倍数减少内存碎片,放到do{}while里是防止这个宏被拆开,开辟的空间大小需要                         //记录,因为是多线程的所以用互斥量,used_memory记录开辟总内存大小

                   return ptr;

    #else
          *((size_t*)ptr) = size;
          update_zmalloc_stat_alloc(size+PREFIX_SIZE);
          return (char*)ptr+PREFIX_SIZE;
    #endif
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小喾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值