保持c程序运行

时间:2013-08-30 15:40:53

标签: c gdb sigkill

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

提前感谢您的回复

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

在强迫Linux保持程序运行之前,我会看到一些你应该做的事情(如果你能这样做的话)。

  1. 注意内存泄漏(请参阅jons34yp的回答)
  2. 解决所有内存泄漏后,请检查您的声明 变量,每个未使用的位但分配的位是一对多。如果一个 byte足够(unsigned char),不要使用short。如果是空头 够了,不要用多久。浮动和双打也是如此。还检查一下 最终的结构和未使用数据的工会。
  3. 同时检查算法及其实现方式。例如一个 稀疏矩阵可以用除了整个之外的其他方式表示 数组的。
  4. 请记住,C编译器用于对齐数据字段。这意味着 例如,在13个字节的数组之后,编译器倾向于 对齐32位或64位边界上的下一个字节,让您随意 中间未使用的字节。结构中也可能发生同样的事情。 因此,请检查编译器对齐设置。
  5. 我希望这有助于找到解决方案。

    亲切的问候, PB