一个奇怪问题的请教

问题是这样的:
两个程序A,B
代码如下:
A

for(;;)printf("test");

B

char *buf;
for(;;)
{
    buf=(char *)malloc(2000);
    buf[1]=1;
    free(buf);
}

系统内存:128M
内存查看方式:/proc
运行方式:
ln -sP /dev/shmem /test
A >/test/test.txt &
B
当程序运行一段时间后,B因为要malloc一个2000的内存,如果分配不成功,后续操作会产生singal 11的段错误,程序退出。

我的问题是:如果将2000改为20,程序一直正常运行,不知道为什么?
另外查看/proc的情况,看到A程序占满内存的情况下,还会有20480字节的内存一直不被使用,不知道原因
请高手解答,谢谢谢谢