我有一个程序一直在抛出一个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
。关于什么可能导致这种行为的任何想法?