gpt4 book ai didi

c++ - 为什么我的程序在内存不足时偶尔会出现段错误而不是抛出 std::bad_alloc?

转载 作者:可可西里 更新时间:2023-11-01 15:20:48 29 4
gpt4 key购买 nike

我有一个程序可以实现多种启发式搜索算法和多个域,旨在通过实验评估各种算法。该程序是用 C++ 编写的,使用 GNU 工具链构建,并在 64 位 Ubuntu 系统上运行。当我运行我的实验时,我使用 bash 的 ulimit 命令来限制进程可以使用的虚拟内存量,这样我的测试系统就不会开始交换。

某些算法/测试实例组合达到了我定义的内存限制。大多数时候,程序会抛出一个 std::bad_alloc 异常,该异常由默认处理程序打印,此时程序终止。有时,程序不会发生这种情况,而只是出现段错误。

为什么我的程序偶尔会在内存不足时出现段错误,而不是报告未处理的 std::bad_alloc 并终止?

最佳答案

一个原因可能是默认情况下 Linux 过度使用内存。从内核请求内存似乎工作正常,但稍后当您实际开始使用内存时,内核注意到“哦,废话,我内存不足”,调用内存不足(OOM) killer 选择一些受害者进程并杀死它。

有关此行为的描述,请参阅 http://lwn.net/Articles/104185/

关于c++ - 为什么我的程序在内存不足时偶尔会出现段错误而不是抛出 std::bad_alloc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2567683/

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