成功实现karatsuba算法后,我决定比较学校算法所需的时间。该程序需要测试多达32768位数字。不幸的是,它停止在8192位(数字存储在一个数组中)。当用gdb运行时,我得到输出:Programme terminated with SIGKILL, Killed
。很显然,我通过网络搜索并发现(因为我在Linux上),内核自动杀死该程序,因为它消耗了太多的资源。 所以我的问题是:有没有办法让它继续运行?保持c程序运行
在此先感谢您的任何回应
成功实现karatsuba算法后,我决定比较学校算法所需的时间。该程序需要测试多达32768位数字。不幸的是,它停止在8192位(数字存储在一个数组中)。当用gdb运行时,我得到输出:Programme terminated with SIGKILL, Killed
。很显然,我通过网络搜索并发现(因为我在Linux上),内核自动杀死该程序,因为它消耗了太多的资源。 所以我的问题是:有没有办法让它继续运行?保持c程序运行
在此先感谢您的任何回应
最可能的原因是内存耗尽。您可以通过在终端上运行top
来粗略测试此假设。
如果是这样的话,valgrind
是你的朋友。仔细查看你的程序中每个你呼叫malloc
的地方,并确保你在之后为每个数组调用free
。
谢谢你的回应,但由于karatsuba算法是递归的,我使用指针,似乎很难释放所有分配的内存。所以我会用普通变量来尝试。 – BigFoot
在强制Linux让你的程序继续运行之前,我看到了许多你应该做的事情(如果你可以这样做的话)。
我希望这有助于找到解决方案。
亲切的问候, PB
'ulimits'也许? –
使用更少的资源,一个32768整型数组('128KB')并不那么大。我猜你可能有内存泄漏,吞噬系统资源。使用** [valgrind](http://valgrind.org/)**检查内存泄漏! –
谢谢,我会检查 – BigFoot