簡體   English   中英

保持交流程序運行

[英]Keeping a c program running

成功實施了karatsuba算法后,我決定將所需時間與學校算法進行比較。 該程序需要測試最多32768位。 不幸的是,它停止在8192位數字(這些數字存儲在數組中)。 當用gdb運行它時,我得到的輸出是: Programme terminated with SIGKILL, Killed 所以很明顯,我在網上搜索后發現(因為我在Linux上),內核自動殺死了該程序,因為它消耗了太多的資源。 所以我的問題是:有沒有辦法讓它繼續運行?

預先感謝您的任何回復

最可能的原因是內存耗盡。 您可以通過在終端運行top來粗略檢驗該假設。

在這種情況下, valgrind是您的朋友。 仔細檢查在程序中調用malloc每個位置,並確保以后對每個數組進行free調用。

我發現在強制Linux保持程序運行之前您應該做的事情(如果仍然可以執行)。

  1. 當心內存泄漏(請參閱jons34yp的答案)
  2. 解決所有內存泄漏后,請檢查變量的聲明,每個未使用的位但已分配的位是一對多的。 如果一個字節足夠(無符號字符),請不要使用short。 如果短就足夠了,請不要使用長。 浮動和雙打相同。 還要檢查最終的結構和聯合是否有未使用的數據。
  3. 還要檢查算法及其實現方式。 例如,稀疏矩陣可以用不同於束縛整個陣列的其他方式來表示。
  4. 請記住,C編譯器用於對齊數據字段。 這意味着,例如,在一個由13個字節組成的數組之后,編譯器傾向於將下一個字節對齊在32位或64位邊界上,從而使您之間留有未使用的字節。 結構中可能發生相同的事情。 因此,請檢查您的編譯器對齊設置。

我希望這有助於找到解決方案。

親切的問候,PB

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM