main(int argc,char* argv[] ) { int arg_mem = argv[1]; while(1) { u_int_ptr =(unsigned int*) malloc(arg_mem * 1024 * 1024); if( u_int_ptr == NulL ) printf("\n leakyapp Daemon @R_419_5138@ due to insufficIEnt available memory...."); sleep( arg_time ); }}
上面的循环运行一段时间并打印消息“leakyapp Daemon @R_419_5138@由于可用内存不足……”.但是当我运行命令“free”时,我可以看到运行该程序对主内存或交换没有影响.
难道我做错了什么 ?
解决方法 在您实际写入之前,物理内存不会提交给您的分配.如果在2.6.23之后有内核版本,请使用带有MAP_POPulATE标志的mmap()而不是malloc():
u_int_ptr = mmap(NulL,arg_mem * 1024 * 1024,PROT_READ | PROT_WRITE,MAP_PRIVATE | MAP_ANONYMOUS | MAP_POPulATE,-1,0);if (u_int_ptr == MAP_@R_419_5138@) /* ... */
如果您有较旧的内核,则必须触摸分配中的每个页面.
总结以上是内存溢出为你收集整理的内存泄漏使用malloc失败全部内容,希望文章能够帮你解决内存泄漏使用malloc失败所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)