1

在成功实现了 karatsuba 算法后,我决定将所需时间与学校算法进行比较。该程序需要测试多达 32768 位数字。不幸的是,它停在 8192 位(这些数字存储在一个数组中)。使用 gdb 运行它时,我得到输出:Programme terminated with SIGKILL, Killed. 所以很明显我在网上搜索并发现(因为我在Linux上),内核自动杀死了程序,因为它消耗了太多的资源。所以我的问题是:有没有办法让它保持运行?

提前感谢您的任何回复

4

2 回答 2

1

最可能的原因是内存耗尽。top您可以通过在终端上运行来粗略地测试这个假设。

如果是这种情况,valgrind是你的朋友。非常仔细地查看您malloc在程序中调用的每个位置,并确保free之后调用每个数组。

于 2013-08-30T19:46:37.447 回答
0

我看到在强制 Linux 保持程序运行之前你应该做一些事情(如果你仍然可以这样做的话)。

  1. 注意内存泄漏(见 jons34yp 的回答)
  2. 解决所有内存泄漏后,检查变量的声明,每个未使用的位但分配的位是一对多的。如果一个字节足够(无符号字符),请不要使用短字符。如果短就足够了,不要使用长。浮点数和双精度数相同。还要检查最终的结构和联合是否有未使用的数据。
  3. 还要检查你的算法和你实现它的方式。例如,稀疏矩阵可以用其他方式表示,而不是用整个数组来表示。
  4. 请记住,C 编译器用于对齐数据字段。这意味着,例如,在一个 13 字节的数组之后,编译器倾向于在 32 位或 64 位边界上对齐下一个字节,从而在其间留下未使用的字节。同样的事情也可能发生在结构中。所以检查你的编译器对齐设置。

我希望这有助于找到解决方案。

亲切的问候,PB

于 2013-08-31T21:23:47.673 回答