- 论坛徽章:
- 0
|
在写一个高并发的文件服务器,发现在10K并发的任务处理完毕之后,top看到依然占用了极高的内存。
但是使用valgrind并未发现泄漏。
于是写了这样一个测试程序
- #include <stdlib.h>
- #include <stdio.h>
- int main()
- {
- char *p[1024];
- int i,j;
- char c;
- for(i = 0;i != 1024;++i)
- {
- p[i] = malloc(64*1024);
- for(j = 0;j != 64*1024;++j)
- p[i][j] = 1;//产生页错误分配实际帧
- }
- for(i = 0;i != 1024-1;++i)
- free(p[i]);
- printf("pause,input any key\n");
- scanf("%c",&c);
- free(p[1024-1]);
- while(1);
- return 0;
- }
复制代码 top里面如下
25574 tedcy 20 0 69608 64m 384 S 0.0 1.8 0:00.20 pts/8 mem_test
输入一个字母以后
25574 tedcy 20 0 4056 604 392 R 99.7 0.0 0:11.66 pts/8 mem_test
可以看到在最后一个元素free以后,内存占用从64M降为604
很是疑惑不解。free是如何工作的? |
|