缺少/ proc/pid/maps中的[heap]部分

lan*_*ng2 8 c memory

我正在尝试一个不断分配内存的简单C程序:

for ( i = 0; i < 10000; i ++ )
{
    array[i] = malloc( 1024*1024 );
    if ( array[i] == NULL )
    {
        break;
    }
    printf("Sleeping...%d\n", i);
    sleep( 60 );
}
Run Code Online (Sandbox Code Playgroud)

完整代码粘贴在这里:http://tny.cz/2d9cb3df

但是,当我cat /proc/pid/maps,我没有任何[heap]部分.为什么?

08048000-08049000 r-xp 00000000 08:11 17         /data/a.out
08049000-0804a000 r--p 00000000 08:11 17         /data/a.out
0804a000-0804b000 rw-p 00001000 08:11 17         /data/a.out
0804b000-0805e000 rw-p 00000000 00:00 0 
b74c6000-b75c8000 rw-p 00000000 00:00 0 
b75c8000-b7775000 r-xp 00000000 08:01 3539272    /lib/i386-linux-gnu/libc-2.17.so
b7775000-b7777000 r--p 001ad000 08:01 3539272    /lib/i386-linux-gnu/libc-2.17.so
b7777000-b7778000 rw-p 001af000 08:01 3539272    /lib/i386-linux-gnu/libc-2.17.so
b7778000-b777b000 rw-p 00000000 00:00 0 
b7797000-b779a000 rw-p 00000000 00:00 0 
b779a000-b779b000 r-xp 00000000 00:00 0          [vdso]
b779b000-b77bb000 r-xp 00000000 08:01 3539289    /lib/i386-linux-gnu/ld-2.17.so
b77bb000-b77bc000 r--p 0001f000 08:01 3539289    /lib/i386-linux-gnu/ld-2.17.so
b77bc000-b77bd000 rw-p 00020000 08:01 3539289    /lib/i386-linux-gnu/ld-2.17.so
bff21000-bff42000 rw-p 00000000 00:00 0          [stack]
Run Code Online (Sandbox Code Playgroud)

Art*_*Art 6

既然你在谈论/proc/pid/maps我假设你在Linux上.

这就是man malloc我碰巧运行的linux发行版的原因:

通常,malloc()从堆中分配内存,并根据需要使用调整堆的大小 sbrk(2).

当分配大于MMAP_THRESHOLD字节的内存块时,glibc malloc()实现将内存分配为私有匿名映射使用mmap(2). MMAP_THRESHOLD默认为128 kB,但可以使用调整 mallopt(3).

使用的分配 mmap(2)不受RLIMIT_DATA资源限制的影响(请参阅参考资料getrlimit(2)).

如果你真的想[heap]/proc/pid/maps每次调用malloc时分配不到128k.