今天我想要说的是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