- 论坛徽章:
- 0
|
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- int i;
- int *pi_tmp;
- for(i=0;i<10000;i++)
- {
- pi_tmp=(int *)malloc(10*1024*1024*sizeof(int));
- fprintf(stderr,"After malloc pi_tmp===%Xn",pi_tmp);
- sleep(1);
- }
- }
复制代码
上面这段代码每一次在堆中分配4*10*1024*1024bytes不释放,我觉得程序所占用的内存会快速增长,但是我用top查看,这个进程并没有占用很多内存,最多的时候才占1M多,大家知道这是为什么吗?我是用root用户执行的,ulimit -a结果如下
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 4080
virtual memory (kbytes, -v) unlimited
应该是操作系统没有限制程序所使用堆的大小吧,程序的执行结果最后就变成了
After malloc pi_tmp===9896008
After malloc pi_tmp===5847008
After malloc pi_tmp===3046008
After malloc pi_tmp===F70F6008
After malloc pi_tmp===F98F7008
After malloc pi_tmp===FC0F8008
After malloc pi_tmp===0
After malloc pi_tmp===0
After malloc pi_tmp===0
After malloc pi_tmp===0
应该是分配失败了,能不能帮我解释一下这个现象呢~~谢谢了~~ |
|