gpt4 book ai didi

c++ - std::bad_alloc 被抛出的其他可能原因

转载 作者:IT王子 更新时间:2023-10-29 00:25:32 78 4
gpt4 key购买 nike

我正在开发一个相当大的 SIP 电话应用程序,有时当我们在高调用负载下使用集成的 Web UI(使用 tntnet 编写)时,程序将由于抛出 std::bad_alloc 而退出。有数百个线程在使用(每个事件调用 3 个),因此导致异常的代码位置非常随机,但总是在使用 GUI 之后。

现在,我明白 std::bad_alloc 可以在内存不足时抛出,但在这种情况下并非如此。我还认为它可以在出现堆损坏时抛出,我仍在寻找它在代码库中的任何位置。

但我的问题是,除了内存不足或堆损坏之外,还有其他原因导致 std::bad_alloc 被抛出吗?我在 Linux 上使用 GNU g++。

最佳答案

很有可能,你真的是失忆了。这将是一个极其罕见的堆损坏错误,一直导致 bad_alloc 被抛出。这就像用外科手术般精确地涂鸦。

可能只是代码中存在分配大量内存的错误。但是您会希望在该代码中至少在大部分时间抛出异常。事实上,异常来自许多不同的地方。

严重的碎片会导致问题,特别是对于 malloc 实现不佳的平台。这种情况很少见,但确实会发生。

有一件事我会立即做 -- 捕获异常并调用一个保存 /proc/self/maps 拷贝的函数。这将使您对进程的峰值内存使用情况有一个很好的了解。您可以判断它是否接近任何平台、政策或硬件限制。

关于c++ - std::bad_alloc 被抛出的其他可能原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8071428/

78 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com