当前位置:  开发笔记 > 编程语言 > 正文

在free/malloc,外部内存挂钩上花费了多少时间?

如何解决《在free/malloc,外部内存挂钩上花费了多少时间?》经验,为你挑选了1个好方法。

这部分是编程/调试相关的,部分是与外部操作系统相关的(超级用户候选人?),但无论如何我都在这里发布,因为如果有人应该知道答案,那就在这里.

我突然开发了一个程序,一个新版本(没有重大变化)导致一切都停止了.我对它进行了分析,看看花了多少时间,但%分布是正常的 - 所有事情都花了很长时间.

使用Very Sleepy通过callstack进行研磨,我注意到free/malloc/delete/realloc占运行时的95%以上.怀疑堆损坏,我回滚了所有更改,但没有任何改变.

使用MSVC的分析器,我挖出了调用堆栈,超出了malloc/realloc,并且令人惊讶地 - 在一个名为Acxtrnal.dll的外部dll上结束了.这是一个堆栈的剪辑:http://i.imgur.com/0xXv5MV.png

显然,一些外部dll正在挂钩我的程序的堆验证程序.这让我有点焦虑.谷歌搜索dll只显示其中的一个官方来源(关于兼容性模式;不相关):https://support.microsoft.com/en-us/kb/2272691

在难以置信地花了半天调试后,问题就消失了.看起来这个人有同样的问题,虽然'答案'可能是无关的:在分析我的fortran程序时,Acxtrnal.dll是使用大部分CPU时间的部分!那是什么dll.

当然,现在,我既好奇又担心这个问题; 它是否会回归 - 为什么它会在第一种情况下发生?如果有人经历过类似的事情,我将不胜感激,因此我们可以阐明这个问题.即使这个问题看起来很少见,也许它会帮助那些人.



1> Shaggi..:

感谢您的集体帮助.供将来参考(和Google员工):

该问题是由Windows容错堆引起的:https://msdn.microsoft.com/en-us/library/windows/desktop/dd744764(v = vs.85).aspx

当您设法将堆损坏到某种未知程度时,它是一个特定于进程的服务.目前尚不清楚如何再次完全禁用该服务; 有人说重命名api dll(在\ windows\apppatch\acxtrnal.dll中找到),或通过注册表禁用它.

在我的情况下,我的程序是一个插件dll,并且显然我解决了在另一个程序中托管dll的问题.

更多信息可以在评论中找到,在这里:http: //billroper.livejournal.com/960122.html

如何关闭容错堆?

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有