是debugbreak()在C 中占据内存

Is Debugbreak() occupies memory in c++?

本文关键字:内存 debugbreak      更新时间:2023-10-16

当我想在C 中进行new时,我需要考虑在没有足够内存的情况下应该做什么,因此我编写了以下代码:

CacheHeapItem* m_Items;
try{
    m_Items = new CacheHeapItem[m_Count];
}catch(const bad_alloc& e){
    DebugBreak();
}

但是我不确定在内存不足时是否会执行DebugBreak函数?

如果使用Microsoft编译器,请使用__debugbreak((,在功能上与debugbreak((winapi函数相同。它不太可能分配任何内存,因为它只是插入 __asm 3 opcode(对于x86和ARM上的等效opcode(。

这显然不是发布的最佳代码,您可以检查是否存在调试器,并且只有在ISDEBUGGERPRESENT:

时才会中断。
CacheHeapItem* m_Items;
try{
    m_Items = new CacheHeapItem[m_Count];
}catch(const bad_alloc& e){
    if (IsDebuggerPresent())
        __debugbreak();
}

如果要捕获一些异常,则应配置异常过滤器。这样,您就不需要编写任何在发布构建中必须删除的特殊调试代码(如果不存在调试器,DebugBreak将导致过程被终止(。