当前位置: 技术问答>linux和unix
内存分配当机(malloc_consolidate)
来源: 互联网 发布时间:2016-08-24
本文导语: 本帖最后由 daisy8675 于 2010-05-10 09:33:06 编辑 最近程序运行,会比较频繁的当机,查看dump发现当机点总是内存分配函数(malloc_consolidate)。 症状: 函数在malloc_consolidate中不能返回,程序收到 Segmentation fault(11)而当机...
症状: 函数在malloc_consolidate中不能返回,程序收到 Segmentation fault(11)而当机。
其中一次栈如下:
#0 0x007d5401 in malloc_consolidate () from /lib/libc.so.6
#1 0x007d73bd in _int_malloc () from /lib/libc.so.6
#2 0x007d93ab in malloc () from /lib/libc.so.6
#3 0x00c50aa7 in operator new () from /usr/lib/libstdc++.so.6
#4 0x00c50bdd in operator new[] () from /usr/lib/libstdc++.so.6
#5 0x085af1ef in function5 (this=0xbfdc3864, byteBufLen=1024, bitBufLen=256) at *.cpp:95
#6 0x085af962 in function6 (this=0xbfdc3864) at *.cpp:24
#7 0x0814931d in function7 (this=0x94cba48, user=0x2492f220, npcOid=2483, bAuto=true) at *p.cpp:1787
#8 0x0814af06 in function8 (this=0x94cba48, cre=0x1c6f8550, user=0x2492f220) at *.cpp:1827
#9 0x085b2dee in function9 (this=0x92e8c6c, ev=0x8775100, data=0xbfdc3a20) ...
栈底函数每次相同,但是栈内容从不重复。
网上搜索了一把,众说纷纭,莫衷一是,还请高手现身指点,谢谢。
主要想知道几个要点:
1 是栈越界还是堆越界,为什么这种越界会引起这种问题呢,小弟实在不能理解。
2 怎样从dump文件找出蛛丝马迹,以尽快将真凶缉拿归案呢?
|
byteBufLen=1024, bitBufLen=256..这个参数大概是个什么意思。
另外。ev_base::EvMemPacket::SetSize 这个函数是执行到哪里了。是刚进入函数还是已经开始执行函数语句。
你可以先定位一下crash的语句么?
另外。ev_base::EvMemPacket::SetSize 这个函数是执行到哪里了。是刚进入函数还是已经开始执行函数语句。
你可以先定位一下crash的语句么?
|
#3 0x00c50aa7 in operator new () from /usr/lib/libstdc++.so.6
#4 0x00c50bdd in operator new[] () from /usr/lib/libstdc++.so.6
如果这里的new不是你的语句调用的,那就是函数调用过程中的堆栈内存分配失败。
那么你应该检查你调用的函数里,是否有大量的堆栈变量。如果有,应该尽可能改成堆分配。
另外你的程序运行环境是什么平台。有些嵌入式平台非常恶心的。
#4 0x00c50bdd in operator new[] () from /usr/lib/libstdc++.so.6
如果这里的new不是你的语句调用的,那就是函数调用过程中的堆栈内存分配失败。
那么你应该检查你调用的函数里,是否有大量的堆栈变量。如果有,应该尽可能改成堆分配。
另外你的程序运行环境是什么平台。有些嵌入式平台非常恶心的。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。