Map all the memory, shrinking block size as necessary
authorMatt Mullins <mmullins@mmlx.us>
Sat, 21 Sep 2013 02:57:32 +0000 (19:57 -0700)
committerMatt Mullins <mmullins@mmlx.us>
Sat, 21 Sep 2013 02:57:32 +0000 (19:57 -0700)
mmap_everything.c

index 2d24390..2940a11 100644 (file)
@@ -1,18 +1,23 @@
+#include <limits.h>
 #include <sys/mman.h>
 #include <sys/types.h>
 #include <stdio.h>
 #include <unistd.h>
 
-static const size_t size = 100 * (1 << 20); // 100MB
-
 int main() {
        pid_t pid = getpid();
        printf("My pid is: %d\n", pid);
 
+       size_t size = ((size_t)1 << (sizeof(size_t) * CHAR_BIT - 1));
+
        void *p;
        do {
-               p = mmap(0, size, PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
-       } while (p != MAP_FAILED);
+               do {
+                       p = mmap(0, size, PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+               } while (p != MAP_FAILED);
+               
+               size >>= 1;
+       } while (size);
        printf("Mapped at: %p\n", p);
 
        getchar();