2
注意,因为freenode 要进行 freenode + nodesize, 因此freenode 不能声明为void * , pointer 的移动是 sizeof(*pointer) * nodesize,
一次申请空间会有overhead,这个大小是固定的,如果一次申请很小的空间的话,空间的有效利用率很低
int leftnodes = 0;
void *freenode;
void *pmalloc(int size)
{
void *p;
if (size != NODESIZE)
return malloc(size);
if (leftnodes == 0)
{
freenode = malloc(NODESGROUP * NODESIZE);
leftnodes = NODESGROUP;
}
leftnodes--;
p = (void *)freenode;
freenode = freenode + NODESIZE;
return p;
}
宏的使用会进行两次递归调用,第一次是递归函数的要求,第二次是宏的要求,递归深度越深越明显
6.
计算1 的个数
int main()
{
int b = 15;
int i = 0;
while (b)
{
b = b & (b - 1);
i++;
}
printf("%d", i);
}
12.将xi当作权值,类似于整数的计算