今天写了一个程序简单的测试一下自己机器cache的大小 ,程序 如下 :
#include <time.h>
2 #include <stdio.h>
3 #include <memory.h>
4 #include <stdlib.h>
5 #include <assert.h>
6
7 #define MINBYTES (1 << 10)
8 #define MAXBYTES (1 << 28)
9 #define MAXSTRIDE 16
10 #define MAXELEMS MAXBYTES/sizeof(int)
11
12 int data[MAXELEMS] = {0,0};
13
14 double run(int size, int stride);
15 void test(int elems, int stride);
16
17 int main(int argc, char * argv[])
18 {
19 int size;
20 int stride;
21 memset(data,23,MAXELEMS);
22 for(size = MINBYTES; size <= MAXBYTES; size += size)
23 {
24 printf("%.1f\t\n",run(size,1));
25 }
26 return 1;
27 }
28
29 double run(int size, int stride)
30 {
31 clock_t start, end, diff;
32
33 int elems = size / sizeof(int);
34 start = clock();
35 test(elems, stride);
36 end = clock();
37 diff = end - start;
38 return (size/stride) / ((double)(end - start));
39 }
40
41 void test(int elems, int stride)
42 {
43 int i, result = 0;
44 volatile int sink;
45 for(i = 0; i < elems; i += stride)
46 result += data[i];
47 sink = result;
48 }
以上是所有程序 ,程序 输出 是
inf
inf
inf
inf
inf
inf
inf
inf
inf
inf
inf
419.4
838.9
559.2
671.1
671.1
516.2
497.1
467.6
由以上结果可得,cache大小为2^11=2M
通过 /proc/cpuinfo
看到的cache大小确实也是2M.