malloc内存泄露测试

测试程序

用于查看程序内存占用的命令:

ps aux | grep a.out | grep -v grep

每列输出的含义:

USER PID     %CPU     %MEM        VSZ           RSS    TTY STAT START TIME COMMAND
用户  进程ID  CPU占用率 内存占用率    已使用的       进程占用的
                                  虚拟内存大小    固定内存量

测试一:分配内存,不使用内存,也不释放内存。

代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int main() {

	int i = 0 ;
	for(i = 0 ;i >=0 ; i++){
		void *p = malloc(100000000) ;
		printf("malloc %d*100000000\n", i);
		//memset(p,'a',100000000) ;
		//free(p) ;
		sleep(1) ;
	}
	return 0;
}

结论:可以看到虚拟内存使用一直在增长,但内存利用率%MEM和占用的固定内存量RSS都没变。

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
misiyu   21008  0.0  0.0 102012   676 pts/20   S+   13:41   0:00 ./a.out
misiyu   21008  0.0  0.0 199672   676 pts/20   S+   13:41   0:00 ./a.out
misiyu   21008  0.0  0.0 297332   676 pts/20   S+   13:41   0:00 ./a.out
misiyu   21008  0.0  0.0 394992   676 pts/20   S+   13:41   0:00 ./a.out
misiyu   21008  0.0  0.0 492652   676 pts/20   S+   13:41   0:00 ./a.out
misiyu   21008  0.0  0.0 590312   676 pts/20   S+   13:41   0:00 ./a.out
misiyu   21008  0.0  0.0 687972   676 pts/20   S+   13:41   0:00 ./a.out
misiyu   21008  0.0  0.0 883292   676 pts/20   S+   13:41   0:00 ./a.out
misiyu   21008  0.0  0.0 980952   676 pts/20   S+   13:41   0:00 ./a.out
misiyu   21008  0.0  0.0 1078612  676 pts/20   S+   13:41   0:00 ./a.out
misiyu   21008  0.0  0.0 1176272  676 pts/20   S+   13:41   0:00 ./a.out
misiyu   21008  0.0  0.0 1273932  676 pts/20   S+   13:41   0:00 ./a.out
misiyu   21008  0.0  0.0 1371592  676 pts/20   S+   13:41   0:00 ./a.out
misiyu   21008  0.0  0.0 1469252  676 pts/20   S+   13:41   0:00 ./a.out
misiyu   21008  0.0  0.0 1566912  676 pts/20   S+   13:41   0:00 ./a.out
misiyu   21008  0.0  0.0 1664572  676 pts/20   S+   13:41   0:00 ./a.out
misiyu   21008  0.0  0.0 1762232  676 pts/20   S+   13:41   0:00 ./a.out
misiyu   21008  0.0  0.0 1859892  676 pts/20   S+   13:41   0:00 ./a.out
misiyu   21008  0.0  0.0 1957552  676 pts/20   S+   13:41   0:00 ./a.out

 

测试二:不断分配内存,使用内存,不释放内存

代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int main() {

	int i = 0 ;
	for(i = 0 ;i >=0 ; i++){
		void *p = malloc(100000000) ;
		printf("malloc %d*100000000\n", i);
		memset(p,'a',100000000) ;
		//free(p) ;
		sleep(1) ;
	}
	return 0;
}

结论:%MEM   VSZ RSS 三个量都在增长

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
misiyu   19778  5.0  1.2 102012 98860 pts/20   S+   11:32   0:00 ./a.out
misiyu   19778  5.5  2.3 199672 196600 pts/20  S+   11:32   0:00 ./a.out
misiyu   19778  5.6  3.5 297332 294016 pts/20  S+   11:32   0:00 ./a.out
misiyu   19778  5.7  4.7 394992 391696 pts/20  S+   11:32   0:00 ./a.out
misiyu   19778  5.8  5.9 492652 489376 pts/20  S+   11:32   0:00 ./a.out
misiyu   19778  5.6  7.1 590312 587056 pts/20  S+   11:32   0:00 ./a.out
misiyu   19778  5.7  8.3 687972 684736 pts/20  S+   11:32   0:00 ./a.out
misiyu   19778  5.7  9.5 785632 782416 pts/20  S+   11:32   0:00 ./a.out
misiyu   19778  5.7 10.7 883292 880096 pts/20  S+   11:32   0:00 ./a.out
misiyu   19778  5.8 11.9 980952 977776 pts/20  S+   11:32   0:00 ./a.out
misiyu   19778  5.8 13.1 1078612 1075456 pts/20 S+  11:32   0:00 ./a.out
misiyu   19778  5.7 14.3 1176272 1173136 pts/20 S+  11:32   0:00 ./a.out
misiyu   19778  5.7 15.4 1273932 1270816 pts/20 S+  11:32   0:00 ./a.out
misiyu   19778  5.7 16.6 1371592 1368496 pts/20 S+  11:32   0:00 ./a.out
misiyu   19778  5.8 17.8 1469252 1466176 pts/20 S+  11:32   0:00 ./a.out
misiyu   19778  5.8 19.0 1566912 1563592 pts/20 S+  11:32   0:00 ./a.out
misiyu   19778  5.8 20.2 1664572 1661272 pts/20 S+  11:32   0:00 ./a.out
misiyu   19778  5.8 21.4 1762232 1758952 pts/20 S+  11:32   0:01 ./a.out
misiyu   19778  5.8 22.6 1859892 1856632 pts/20 S+  11:32   0:01 ./a.out

测试三:分配内存,使用内存,释放内存

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int main() {

	int i = 0 ;
	for(i = 0 ;i >=0 ; i++){
		void *p = malloc(100000000) ;
		printf("malloc %d*100000000\n", i);
		memset(p,'a',100000000) ;
		//free(p) ;
		sleep(1) ;
	}
	return 0;
}

结论:%MEM   VSZ RSS 三个量都比较稳定

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
misiyu   19403  6.5  0.0   4352  1328 pts/20   S+   11:30   0:00 ./a.out
misiyu   19403  6.6  0.0   4352  1328 pts/20   S+   11:30   0:00 ./a.out
misiyu   19403  6.5  0.0   4352  1328 pts/20   S+   11:30   0:00 ./a.out
misiyu   19403  6.5  0.0   4352  1328 pts/20   S+   11:30   0:00 ./a.out
misiyu   19403  6.1  0.5 102012 44356 pts/20   R+   11:30   0:00 ./a.out
misiyu   19403  5.8  0.0   4352  1328 pts/20   S+   11:30   0:00 ./a.out
misiyu   19403  6.0  0.0   4352  1328 pts/20   S+   11:30   0:00 ./a.out
misiyu   19403  6.0  0.0   4352  1328 pts/20   S+   11:30   0:00 ./a.out
misiyu   19403  6.0  0.0   4352  1328 pts/20   S+   11:30   0:00 ./a.out
misiyu   19403  6.0  0.0   4352  1328 pts/20   S+   11:30   0:00 ./a.out
misiyu   19403  6.1  0.0   4352  1328 pts/20   S+   11:30   0:00 ./a.out
misiyu   19403  6.2  0.0   4352  1328 pts/20   S+   11:30   0:00 ./a.out
misiyu   19403  6.1  0.0   4352  1328 pts/20   S+   11:30   0:00 ./a.out
misiyu   19403  6.2  0.0   4352  1328 pts/20   S+   11:30   0:01 ./a.out
misiyu   19403  6.2  0.0   4352  1328 pts/20   S+   11:30   0:01 ./a.out
misiyu   19403  6.3  0.0   4352  1328 pts/20   S+   11:30   0:01 ./a.out
misiyu   19403  6.3  0.0   4352  1328 pts/20   S+   11:30   0:01 ./a.out
misiyu   19403  6.3  0.0   4352  1328 pts/20   S+   11:30   0:01 ./a.out
misiyu   19403  6.3  0.0   4352  1328 pts/20   S+   11:30   0:01 ./a.out

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值