Strange std::bad_alloc

Strange std::bad_alloc

本文关键字:alloc bad Strange std      更新时间:2023-10-16

据我所知,可以抛出std :: bad_alloc的三个原因:

  1. 该过程要求的内存比可以使用的内容更多
  2. 地址空间太分散了,无法为大部分连续内存的要求提供请求
  3. 堆管理数据架构已损坏

我们的代码属于std :: bad_alloc,但是上述原因似乎都不适用。该数据架构是存储为std ::顶点列表的图表,每个顶点再次存储一个std ::它是其一部分的边缘的列表以及一定数量的连续数据。

对于小图(< = 100'000顶点),该程序的运行良好,无论每个顶点的数据部分的大小多大(我们总共可以分配40 GB)。但是,如果顶点的数量变大,那么即使在使用"仅" 8 GB内存的实例上,我们都会得到一个std :: bad_alloc异常。

由于在较大的块中分配更多记忆时没有问题。在某些部分中,我们以一种非常容易出错的方式来处理指针,因此我们可能会破坏Heap数据架构。但是,当在较小的实例上运行时,Valgrind的Memcheck将我们的代码完美无瑕,因此原因似乎也不太可能(在投掷实例时,Valgrind本身就耗尽了内存,因此我们无法直接检查该情况)。

有什么想法对这种行为的原因还有什么,或者我们可能会进行哪些测试以进一步解决问题?

OS:Fedora 19
构建系统:带有GCC 4.8.2

的CMAKE

我无法在您的帖子上发表评论,所以我将其回复。

我在使用Kaldi(与您的GCC相同的系统和GCC)时遇到了同样的问题。我没有跟踪此问题的确切来源,但是似乎内核3.12是这里的问题。我启动了其中一个备用内核(3.11系列之一),问题已经消失了。

您可以使用:

yum list --showduplicates kernel

找到可用的3.11内核。

编辑:

看来,此错误已固定在内核3.12.11-201和3.13

来源:bugzilla