2016-09-19 53 views
0

經過幾天的測試,我發現運行時修補機制patch_functions.cc在生產環境中不安全。
除了HeapAlloc()和HeapFree()外,它似乎在VS2010項目中運行良好,但由於一些未解決的問題而無法在VS2015項目中使用Open Issues。 窗戶自述介紹了使用tcmalloc這種替代方式:連接Google的TCMalloc庫的最安全方式


一種替代上述所有的是靜態與libc的應用程序鏈接 ,然後替換它與tcmalloc的malloc。這允許你 正常建立和鏈接你的程序; tcmalloc支持 進入後處理步驟。這比上述 技術(這取決於運行時修補,這本身就是脆弱的 )更可靠,但需要做更多的工作。有關詳細信息,請參閱 https://groups.google.com/group/google-perftools/browse_thread/thread/41cd3710af85e57b


不幸的是,提供LIK是urechable,看來,谷歌已經關閉了該組。

有人可以解釋我如何做到這一點?

回答

1

我認爲它建議編寫自己的malloc,它使用tcmalloc

所以,你必須定義和連接你自己的一個(通過創建或使用又名翻譯單元的.C),寫這樣的事情

#ifdef __cplusplus 
extern "C" { 
#endif 

#include <stdlib.h> 

void* malloc(size_t size) { 
    return tcmalloc(size); 
} 

//Also define a free if memory which has been allocated by tcmalloc 
//needs to be freed by a special function 
// Like 
/* 
void free(void* ptr) { 
    if (ptr) { 
     tcfree(ptr); 
    } 
} 
*/ 

#ifdef __cplusplus 
} 
#endif 

問題是:根據您的樓宇系統或連接上,它可能會引起雙重符號的爭論。然後你必須以某種方式排除libcs​​ malloc,或者自己更改libc。

+0

作爲一個完整的答案有用但並不相當 –

相關問題