1 #include "alloc.h"
2 #include "libcflat.h"
3 #include "vmalloc.h"
4 
sieve(char * data,int size)5 static int sieve(char* data, int size)
6 {
7     int i, j, r = 0;
8 
9     for (i = 0; i < size; ++i)
10 	data[i] = 1;
11 
12     data[0] = data[1] = 0;
13 
14     for (i = 2; i < size; ++i)
15 	if (data[i]) {
16 	    ++r;
17 	    for (j = i*2; j < size; j += i)
18 		data[j] = 0;
19 	}
20     return r;
21 }
22 
test_sieve(const char * msg,char * data,int size)23 static void test_sieve(const char *msg, char *data, int size)
24 {
25     int r;
26 
27     printf("%s:", msg);
28     r = sieve(data, size);
29     printf("%d out of %d\n", r, size);
30 }
31 
32 #define STATIC_SIZE 1000000
33 #define VSIZE 100000000
34 char static_data[STATIC_SIZE];
35 
main(void)36 int main(void)
37 {
38     void *v;
39     int i;
40 
41     printf("starting sieve\n");
42     test_sieve("static", static_data, STATIC_SIZE);
43     if (vm_available()) {
44 	    setup_vm();
45 	    test_sieve("mapped", static_data, STATIC_SIZE);
46 	    for (i = 0; i < 3; ++i) {
47 		v = malloc(VSIZE);
48 		test_sieve("virtual", v, VSIZE);
49 		free(v);
50 	    }
51     }
52 
53     return 0;
54 }
55