diff --git a/w2v-server.pl b/w2v-server.pl
index f4f83f6..cc08e4b 100644
--- a/w2v-server.pl
+++ b/w2v-server.pl
@@ -38,6 +38,7 @@
 #include <math.h>
 #include <malloc.h>
 #include <stdlib.h>    //strlen
+#include <sys/mman.h>
 
 #define max_size 2000
 #define max_w 50
@@ -58,6 +59,7 @@
 
 int init_net(char *file_name) {
   FILE *f, *binvecs, *binwords;
+	int binwords_fd, binvecs_fd;
 	char binvecs_fname[256], binwords_fname[256];
 	strcpy(binwords_fname, file_name);
 	strcat(binwords_fname, ".words");
@@ -73,19 +75,23 @@
   fscanf(f, "%lld", &words);
 	if(MAX_WORDS > 0 && words > MAX_WORDS) words = MAX_WORDS;
   fscanf(f, "%lld", &size);
-  vocab = (char *)malloc((long long)words * max_w * sizeof(char));
   for (a = 0; a < MAX_NEIGHBOURS; a++) bestw[a] = (char *)malloc(max_size * sizeof(char));
-  M = (float *)malloc((long long)words * (long long)size * sizeof(float));
-  if (M == NULL) {
-    printf("Cannot allocate memory: %lld MB    %lld  %lld\n", (long long)words * size * sizeof(float) / 1048576, words, size);
-    return -1;
-  }
-	if( (binvecs = fopen(binvecs_fname, "rb")) != NULL && (binwords = fopen(binwords_fname, "rb")) != NULL) {
-		fread(M, sizeof(float), (long long)words * (long long)size, binvecs);
-		fclose(binvecs);
-		fread(vocab, sizeof(char), (long long)words * max_w, binwords);
-		fclose(binwords);
+	if( (binvecs_fd = open(binvecs_fname, O_RDONLY)) >= 0 && (binwords_fd = open(binwords_fname, O_RDONLY)) >= 0) {
+		M = mmap(0, sizeof(float) * (long long)words * (long long)size, PROT_READ, MAP_PRIVATE, binvecs_fd, 0);
+		vocab = mmap(0,  sizeof(char) * (long long)words * max_w, PROT_READ, MAP_PRIVATE, binwords_fd, 0);
+    if (M == MAP_FAILED || vocab == MAP_FAILED) {
+			close(binvecs_fd);
+			close(binwords_fd);
+			fprintf(stderr, "Cannot mmap %s or %s\n", binwords_fname, binvecs_fname);
+			exit(-1);
+    }
 	} else {
+		vocab = (char *)malloc((long long)words * max_w * sizeof(char));
+		M = (float *)malloc((long long)words * (long long)size * sizeof(float));
+		if (M == NULL) {
+			printf("Cannot allocate memory: %lld MB    %lld  %lld\n", (long long)words * size * sizeof(float) / 1048576, words, size);
+			return -1;
+		}
 		for (b = 0; b < words; b++) {
 			a = 0;
 			while (1) {
