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分钟)。
参考资料:
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn