redis基数树rax源码分析(2)

本文探讨了raxPadding函数在redis基数树(rax)中的作用,即确保内存节点大小为8的倍数以实现内存对齐,提高性能。尽管内存对齐能提升CPU的内存访问速度,但rax的作者参考结构体处理方式,因C语言对柔性数组的内存对齐优化不足,所以需要手动处理内存对齐,以确保raxNode结构体的高效运行。作者提供了个人实践项目链接,期待反馈。
摘要由CSDN通过智能技术生成

在这里插入图片描述

今天我想要说的是rax中的padding这个函数,我查了很多的资料,大家的博客都告诉我们内存对齐提高性能,却没有去分析为什么,是有根据让作者选择这样做?如果只是这样简单的放过,总感觉让人有一丝的遗憾。


  
先把主角拉出来:

#define raxPadding(nodesize) 
((sizeof(void*)-((nodesize+4) % sizeof(void*))) & (sizeof(void*)-1))

  首先要说的是raxPadding的作用是:让raxNewNode申请的内存nodesize是8的倍数。

raxNode *raxNewNode(size_t children, int datafield) {
    size_t nodesize = sizeof(raxNode)+children+raxPadding(children)+
                      sizeof(raxNode*)*children;
    if (datafield) nodesize += sizeof(void*);
    raxNode *node = rax_malloc(nodesize);
    if (node == NULL) return NULL;
    node->iskey = 0;
    node->isnull = 0;
    node->iscompr = 0;
    node->siz
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值