Linux【13】-报错5-std::bad_alloc

sam@sam-Precision-WorkStation-T7500[lib1] /sam/qiime/Uparse/usearch -uchime_ref wx.fna -db /sam/qiime/Uparse/gold.fasta -uchimeout resultswx.uchime -uchimealns alnfilewx -chimeras chwx.fasta -nonchimeras goodwx.fasta -strand plus

usearch v7.0.1001_i86linux32, 4.0Gb RAM (49.5Gb total), 12 cores

(C) Copyright 2013 Robert C. Edgar, all rights reserved.

http://drive5.com

Licensed to: peter_rjp@163.com


00:00 2.3Mb Reading wx.fna, 360Mb

00:01 362Mb 1032178 (1.0M) seqs, min 132, avg 236, max 239nt

00:02 378Mb Reading /sam/qiime/Uparse/gold.fasta, 16Mb

00:02 394Mb 10362 (10.4k) seqs, min 1205, avg 1470, max 1655nt

00:02 394Mb  100.0% Masking

00:03 395Mb  100.0% Word stats

00:03 453Mb  100.0% Building slots

00:04 453Mb  100.0% Build index  

terminate called after throwing an instance of 'std::bad_alloc'

  what():  std::bad_alloc

zsh: abort      /sam/qiime/Uparse/usearch -uchime_ref wx.fna -db /sam/qiime/Uparse/gold.fasta

一个服务器程序,长时间运行报错了.———–terminate called after throwing an instance of ‘std::bad_alloc’ what(): St9bad_alloc———–据查为内存不足所致 new 无法分配到相应内存,内存存在泄露.std::bad_alloc is an exception that gets thrown by ‘new’ when it can’tallocate the memory you requested. Something (very likely the standardlibrary containers you are using) is requesting memory, and that memorycan’t be allocated.

这个要看是在什么环境下。

在dos下,由于直接使用的物理内存,没有采取虚页面技术,我们对内存的操作就肯定会像硬盘一样,不停地malloc和free或者new和delete,再加上一些程序可能忘记了free或者delete,内存就会产生很多碎片。在这种情况下,如果new一块很大的内存,而每个碎片都不能容纳的时候,肯定会失败。能做的事情就是重启机器。我认为在dos下的内存整理不可能存在。

在windows下,就完全不是这个回事了。windows98一来,32位的CPU可以支持到多达4G的可用内存。这是什么概念呢?如果你的物理内存是32M,你可以在硬盘上开辟一块“虚拟内存”,而这块虚拟内存是由操作系统控制的,对应用程序来说是透明的。同时,windows系列对内存采取了“页式管理”,实际上在操作系统级别上已经不存在“连续的非常大的内存”,但是对于应用程序来说,每一个应用程序都可以使用“连续的多达4G的内存”。这是个什么概念呢?好像在“单用户单任务的dos”下面,在运行的这个应用程序可以使用4G的内存,这样,new失败的可能性几乎是不存在的。

但是这也不是绝对的,我想,到现在为止,还没有那个朋友给自己的电脑设置的虚拟内存会达到4G,同时,如果多个非常耗内存的应用程序同时开启,同时使用的内存达到了你的“物理内存+虚拟内存”的上限,这个时候向操作系统申请内存,几乎肯定要失败的。(只是这种情况非常少)同时,这个时候系统的速度……(如果有朋友用过32M的内存安装winxp,并且将虚拟内存设置为128M,肯定经常会出来一个“虚拟内存不够,一些应用程序的内存申请将被拒绝”,并且我尝试过64M内存启动winxp,用了将近10分钟)。

参考资料:

http://bbs.csdn.net/topics/70012232

这里是一个广告位,,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn