2013-07-12 51 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你包括字覆写。 –