2013-07-12 52 views
0

在我們的生產環境中,當我們正在執行一個.so文件批量的一部分,我們總會遇到一個致命如下:釋放calloc失敗字節

釋放calloc失敗9088個字節 日期2013年12月7日01: 55:05

請讓我知道calloc內存問題的可能原因。

+3

聽起來像你用完內存。發生問題時看過內存消耗了嗎? – djf

+0

@djf:系統中有足夠的RAM。 – kanna

+0

@djf:這隻發生在一個特定的過程中。 – kanna

回答

2

也許您應該檢查'進程可以使用的最大AIX數據段數量'是如何設置的(環境變量LDR_CNTRL)。請參閱IBM Performance Tuning Guide在aix ulimit謊言,如果它告訴你數據大小是無限的。

+0

這是一個非常有可能的第一個地方+1 –

+0

+1我也對此答案致敬:) –

1

有可能是這背後

1兩方面的原因),你沒有足夠的內存

2)釋放calloc沒有得到所要求的大小的連續內存塊。

在第一種情況下,你沒有任何選擇,但如果有第二種情況,那麼你可以打破你的一個calloc調用2.3 ..或更多的調用來獲得連續內存的小塊。

+0

1.我們有足夠的記憶。 2.這個選項我可以嘗試。你能告訴我怎樣才能打破一個calloc。您的意見讚賞。 – kanna

+0

calloc需要參數中的number和sizeof(元素)。因此,而不是要求一個大數字將這個數字分成兩個或兩個以上,併爲每個calloc調用calloc。例如,將'calloc(600,sizeof(int))'分解爲'calloc (200,sizeof(int)); calloc(400.sizoef(int));' –

2

有許多可能的原因:

  1. 工藝運行內存不足。相對不太可能,你已經打折了。
  2. calloc()使用的控制信息已被覆蓋損壞,從而導致程序內存不足的錯誤報告。這可能是因爲你的程序在分配的內存邊界之外寫入的。
  3. 報告錯誤的代碼行寫入不正確。

由於文件大小很小(9088字節),所以不太可能遇到算術溢出問題。

通常,您會被建議使用valgrind來檢測內存問題。但是,這在AIX上不可用。也許你有Purify;這是一個很好的工具(但它不是免費軟件)。

+1

+1堆腐敗可能性 - 可能很難追查,但我會說這可能是最可能的替代方案... – twalberg

+0

+1你包括字覆寫。 –