Keep a count of how many pages allocated
authorMatt Mullins <mmullins@mmlx.us>
Sat, 21 Sep 2013 03:37:56 +0000 (20:37 -0700)
committerMatt Mullins <mmullins@mmlx.us>
Sat, 21 Sep 2013 03:37:56 +0000 (20:37 -0700)
mmap_everything.c

index 2940a11..bc52ec6 100644 (file)
@@ -4,21 +4,41 @@
 #include <stdio.h>
 #include <unistd.h>
 
+#define MAX_BITS (sizeof(size_t) * CHAR_BIT - 1)
+
 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));
+       size_t allocated[MAX_BITS+1];
+       for (size_t i = 0; i <= MAX_BITS; ++i) {
+               allocated[i] = 0;
+       }
+
+       size_t size = ((size_t)1 << MAX_BITS);
+       size_t bit = MAX_BITS;
 
        void *p;
        do {
                do {
                        p = mmap(0, size, PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
-               } while (p != MAP_FAILED);
+                       if (p != MAP_FAILED) {
+                               allocated[bit]++;
+                       } else {
+                               break;
+                       }
+               } while (1);
                
                size >>= 1;
+               bit--;
        } while (size);
-       printf("Mapped at: %p\n", p);
+
+       printf("Mapped the following sizes:\n");
+       for (size_t i = 0; i <= MAX_BITS; ++i) {
+               if (allocated[i] != 0) {
+                       printf("%zu\t%zu\n", i, allocated[i]);
+               }
+       }
 
        getchar();
 }