2

我有一个程序一直在抛出一个std::bad_alloc。该平台是 Windows 8 x64,并且正在使用 ICC 进行编译,没有进行优化。

我注意到当“空闲”内存量达到 0 时会引发异常,但仍有大约 4Gb 的“备用”内存剩余。根据我所知道的和这个答案,我认为当可用内存耗尽时,将使用备用内存。这似乎没有发生。

该问题似乎不是由单个大分配引起的。在深度递归期间始终抛出异常,因此有问题的分配已经完成了很多次。在抛出过程中堆栈看起来像这样:

    KernelBase.dll!_RaiseException@16()    Unknown
    msvcr110d.dll!_CxxThrowException(void * pExceptionObject, const _s__ThrowInfo * pThrowInfo) Line 152    C++
    msvcr110d.dll!operator new(unsigned int size) Line 63   C++
    Project2.exe!list_make(int elt, void * list) Line 85    C++
    Project2.exe!`anonymous-namespace'::ReverseHelper(void * list, void * reverse) Line 225 C++
    Project2.exe!`anonymous-namespace'::ReverseHelper(void * list, void * reverse) Line 227 C++
    Project2.exe!`anonymous-namespace'::ReverseHelper(void * list, void * reverse) Line 227 C++

传递给的大小operator new是 only 12。关于什么可能导致这种行为的任何想法?

4

0 回答 0