终于会用markdown了,正儿八经写篇博客吧!
众所周知,使用高效的算法和数据结构可以有效改善程序的性能,最近看csapp,里面介绍了不少在算法和数据结构以下的层面,如何优化程序。这些方法对程序性能不会有飞跃的提升,但是在算法和数据结构都已经被充分良好优化的程序中,使用这些方法还可以进一步提升程序的时间和空间性能。这些方法虽然不能将时空复杂度做出优化,但合理的使用这些方法,或者是避免一些误区,有时可以将性能提升几倍之多。
1.写局部性好的程序。一般来说,局部性好的程序会比局部性差的程序有更加良好的性能。
示例:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define SIZE 10000
char a[SIZE + 1][SIZE + 1];
int main(void)
{
clock_t start = clock();
for (int i = 1; i <= SIZE; i++)
{
for (int j = 1; j <= SIZE; j++)
{
a[i][j] = 0;
}
}
clock_t end = clock();;
printf("局部性良好:%d\n", end - start);
start = clock();;
for (int i = 1; i <= SIZE; i++)
{
for (int j = 1; j <= SIZE; j++)
{
a[j][i] = 0;
}
}
end = clock();;
printf("局部性很差:%d\n", end - start);
return 0;
}
输出:
我们可以看出,在这种比出较极端的情况下,局部性相差比较多的程序性能之间可以相差2倍多