#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/time.h>

#define MEGABYTES	(1024*1024)

int pagefault_megabyte(char **ptr)
{
	char *ptr_local;
	int j;

	ptr_local = *ptr;

	srand((unsigned) time(NULL));	
	for (j = 0; j < MEGABYTES; j++, ptr_local++) {
  	        memset(ptr_local, rand()%256, 1);
	}
}

main(int argc, char *argv[])
{
	int i, mem_mega_bytes;
	char *ptr[1024*1024];

	if (argc != 2) {
		printf("Invalid param\n");
		return 1;
	}
	mem_mega_bytes = atoi(argv[1]);

	for (i = 0; i < mem_mega_bytes; i++) {
		ptr[i] = malloc(MEGABYTES);
		if (ptr[i] == NULL) {
			printf("malloc error. (%s)\n", strerror(errno));
			exit(1);
		}
	}

retry:
	for (i = 0; i < mem_mega_bytes; i++) {
		pagefault_megabyte(&ptr[i]);
	}
	goto retry;
}