2016-01-08 26 views
5

這是部分編程/調試相關的,部分與外部操作系統相關的(超級用戶候選人?),但我仍然在這裏發佈它,因爲如果有人應該知道答案,它就在這裏。在free/malloc,外部內存掛鉤中花費的時間量是多少?

我正在開發一個程序,突然間,一個新的版本(沒有大的變化)導致一切都停下來。我對它進行了剖析,看看需要花費多少時間,但%分佈是正常的 - 一切只花了很長時間。

研磨通過非常困的調用堆棧,我注意到free/malloc/delete/realloc佔95%+的運行時間。懷疑堆腐敗,我回滾了所有的變化,但沒有改變。

使用MSVC的分析器,我挖掘了調用堆棧,超出了malloc/realloc並且結束了 - 令人驚訝的是 - 在一個名爲的外部DLL中Acxtrnal.dll。這裏是一個堆棧的剪輯:http://i.imgur.com/0xXv5MV.png

所以顯然,一些外部DLL掛鉤到我的程序的堆驗證程序。這讓我有點焦慮。使用谷歌搜索DLL只揭示它只有一個官方來源(關於兼容模式;不相關):https://support.microsoft.com/en-us/kb/2272691

經過半天的調試懷疑,問題消失了。看來這傢伙有同樣的問題,雖然「答案」很可能是不相關的:現在​​

,當然,我是又好奇又擔心的問題;它是否會返回 - 以及爲什麼發生在第一個案例中?如果有人經歷過類似的事情,我將不勝感激,所以我們可以闡明這個問題。即使這個問題似乎很少,也許它會幫助那裏的人。

+3

你是誰希望遵循所有這些鏈接?請在您的文章中提供[MCVE]。 –

+1

以用戶身份運行程序時,即在調試器/ IDE環境之外,是否出現過減速? –

+3

@πάνταῥεῖ - 您想要一個可證實的問題例子,它意外出現,沒有主要的源代碼變更,儘管回滾了那些變化,然後消失了沒有明顯的原因?有時候,如果不知道造成問題的原因,就無法提供一個最小可驗證的例子。 – Steve314

回答

7

感謝您的集體幫助。對於未來的參考值(和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

How do I turn off the fault tolerant heap?

相關問題