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