$ 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
-- Andreas Schwab, SUSE Labs, sch...@suse.de GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE 1748 E4D4 88E3 0EEA B9D7 "And now for something completely different."