- 论坛徽章:
- 0
|
本帖最后由 airhello 于 2010-03-27 11:01 编辑
写了一个小程序,不断地申请内存,每次申请1024字节,一直申请到1G,也就是申请1024*1024次。
申请完后,过一会,我就把这些内存全部释放了,但从ps aux或top来看,内存占用量还是1G多,一直不下降。
我知道,内存申请后,free时不一定真正释放。但这大的内存free后,还一直不降,很是不理解。
附上代码。只是为了测试内存而写,用信号来控制申请与释放。执行命令:./test size,其中size为分配给buf的大小。运行后,kill -55 pid来free内存。- #include <stdio.h>
- #include <signal.h>
- struct memnode
- {
- struct memnode *next;
- unsigned char *buf;
- unsigned int buf_len;
- };
- unsigned char tag = 1;
- void sig_55(void)
- {
- if(tag)
- tag = 0;
- else
- tag = 1;
- }
- int main(int argc, char *argv[])
- {
- struct memnode *head = NULL, *p = NULL;
- int size = 0;
- unsigned int malloc_num = 0;
- unsigned int free_num = 0;
- if(argc != 2){
- printf("input error!\n");
- exit(-1);
- }
- size = atoi(argv[1]);
- signal(55, &sig_55);
- printf("MemUnitSize: %d\n", size);
- while(1){
- if(tag){
- if(malloc_num > 1024*1024){
- sleep(1);
- continue;
- }
- p = (struct memnode *)malloc(sizeof(struct memnode));
- if(NULL == p){
- exit(-1);
- }
- p->buf = (unsigned char *)malloc(size*sizeof(unsigned char));
- if(NULL == p->buf){
- exit(-1);
- }
- p->next = head;
- head = p;
- malloc_num++;
- }
- else{
- p = head;
- if(p == NULL){
- sleep(1);
- continue;
- }
- while(p){
- head = p->next;
- free(p->buf);
- free(p);
- free_num++;
- p = head;
- }
- printf("malloc_num: %d, free_num: %d\n", malloc_num, free_num);
- }
- }
- exit(0);
- }
复制代码 |
|