$ cat mmap.c
#include <stdio.h>
#include <sys/mman.h>
int
main (void)
{
void *A;
size_t L = 0, U, Max = 0;
for (U = 1; ; U *= 2)
{
A = mmap (0, U, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE,
-1, 0);
if (A == (void *) -1)
break;
else
munmap (A, U);
}
while (L + 1 < U)
{
size_t M = L + (U - L) / 2;
A = mmap (0, M, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE,
-1, 0);
if (A == (void *) -1)
U = M;
else
{
Max = M;
munmap(A, M);
L = M;
}
}
printf ("%zx\n", Max);
}
$ cc -O2 -g -Wall -std=gnu11 -g mmap.c -o mmap
$ ./mmap
7f672e5ff000
$ qemu-x86_64 ./mmap
Killed