The default RAM size for Exynos4 boards is 1GB. So we're trying a 1GB allocation on a system that has 3GB of total virtual address space. In succeeding cases we have: 6474 mmap2(NULL, 131072, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb3998000 [...] 6474 brk(0x80fc9000) = 0x80fc9000 6474 mmap2(NULL, 1073741824, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40000000 while in the failed case we get: 6334 mmap2(NULL, 131072, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x43447000 [...] 6334 brk(0x80fc9000) = 0x80fc9000 6334 mmap2(NULL, 1073741824, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory) So I'd guess that we simply don't have space to fit 1GB naturally aligned memory into our address space in the failed case because other allocations clobber the only spot we can have this on because 0x00000000 - 0x40000000 reserved because of NULL 0x40000000 - 0x80000000 0x80000000 - 0xc0000000 used by brk heap, stack in successful case 0xc0000000 - end reserved for kernel Why do we some times have allocations (and the stack) at 0x4.. while at 0xb.. at other times? I don't know yet ;).