Where The Four Megabytes Went

A service running on 64-bit Linux does this and then dumps /proc/self/maps:

char *small = malloc(64);
char *big   = malloc(4 * 1024 * 1024);
55d0f4a00000-55d0f4a01000 r-xp 00000000 fd:01 1443590  /opt/svc/agg
55d0f4c00000-55d0f4c01000 rw-p 00000000 fd:01 1443590  /opt/svc/agg
55d0f61a3000-55d0f61c4000 rw-p 00000000 00:00 0        [heap]
7f2a41c00000-7f2a42001000 rw-p 00000000 00:00 0
7f2a4a1c9000-7f2a4a34e000 r-xp 00000000 fd:01 2229410  /usr/lib/libc.so.6
7ffd9c7e1000-7ffd9c802000 rw-p 00000000 00:00 0        [stack]

Which mapping contains the address stored in big?

A

The r-xp mapping of /usr/lib/libc.so.6, since malloc is libc code and allocates out of its own image

B

The unnamed anonymous mapping at 7f2a41c00000

C

[heap]

D

The rw-p mapping of /opt/svc/agg