第九章 代码调优

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;
}


4
宏的使用会进行两次递归调用,第一次是递归函数的要求,第二次是宏的要求,递归深度越深越明显

6.

计算1 的个数

int main()
{
	int b = 15;
	int i = 0;
	while (b)
	{
		b = b & (b - 1);
		i++;
	}
	printf("%d", i);
}

12.将xi当作权值,类似于整数的计算

猜你喜欢

转载自blog.csdn.net/juttajry/article/details/51234780