#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();
}