我有一个C++程序/ Linux,它在运行2-3秒内开始在32GB RAM上分配错误std::bad alloc
(并由包装调用程序重新启动)。我真正关心的是解决这个问题,但我希望一步一步地建立起我对我对问题的理解的信心。获取std :: bad_alloc错误;如何交叉验证该操作系统是否真的内存不足
看起来系统无法为new
请求分配内存(当操作系统内存不足时会发生这种情况)。程序运行时,在另一个终端上运行sar
命令时可能的最小间隔(1秒),但我看到kbcached
是〜24GB的内存。为什么操作系统无法释放缓存并使该内存可用于new
请求? 1秒的时间太长(与程序运行速度相比)或者我在这里做错了。
基本上我想交叉验证并指出操作系统确实耗尽内存,因此无法分配内存,然后从这一点开始处理。怎么做?
理想情况下,我想有就在该点的系统统计信息时内存分配失败,好像多少缓存,总使用内存等
只是一个说明..它与你如何拥有RAM无关,它取决于进程虚拟内存地址空间中存在多少空闲内存。我不知道命令来检查进程虚拟内存分配。 – Naveen
我想这将是特定于操作系统的。 – sharptooth
你的进程分配了多少内存?你的流程有什么限制?它是32位吗? –