#include "alloc.h" | |
#include "libcflat.h" | |
static int sieve(char* data, int size) | |
{ | |
int i, j, r = 0; | |
for (i = 0; i < size; ++i) | |
data[i] = 1; | |
data[0] = data[1] = 0; | |
for (i = 2; i < size; ++i) | |
if (data[i]) { | |
++r; | |
for (j = i*2; j < size; j += i) | |
data[j] = 0; | |
} | |
return r; | |
} | |
static void test_sieve(const char *msg, char *data, int size) | |
{ | |
int r; | |
printf("%s:", msg); | |
r = sieve(data, size); | |
printf("%d out of %d\n", r, size); | |
} | |
#define STATIC_SIZE 1000000 | |
#define VSIZE 100000000 | |
char static_data[STATIC_SIZE]; | |
int main(void) | |
{ | |
void *v; | |
int i; | |
printf("starting sieve\n"); | |
test_sieve("static", static_data, STATIC_SIZE); | |
setup_vm(); | |
test_sieve("mapped", static_data, STATIC_SIZE); | |
for (i = 0; i < 3; ++i) { | |
v = malloc(VSIZE); | |
test_sieve("virtual", v, VSIZE); | |
free(v); | |
} | |
return 0; | |
} |