2016-09-19 2 views
0

После нескольких дней тестирования я понял, что механизм исправления времени исполнения patch_functions.cc небезопасен для использования в производственной среде.
Кажется, что он хорошо работает в проекте VS2010, за исключением HeapAlloc() и HeapFree(), но не может использоваться в проекте VS2015 из-за некоторых нерешенных проблем Open Issues. винд ридй описывает этот альтернативный способ использовать tcmalloc:Самый безопасный способ связать TCMalloc от Google


Альтернативы все вышеперечисленное статический связать приложение с LIBC, а затем заменить его таНос с tcmalloc. Это позволяет вам просто создать и связать вашу программу в обычном режиме; поддержка tcmalloc входит в этап последующей обработки. Это более надежно, чем вышеописанная методика (которая зависит от исправления во время выполнения, которая по своей сути хрупкая), хотя больше работы по настройке. Для получения дополнительной информации см https://groups.google.com/group/google-perftools/browse_thread/thread/41cd3710af85e57b


К сожалению, при условии Лик является urechable, кажется, что Google уже закрыл группу.

Может ли кто-нибудь объяснить мне, как это сделать?

ответ

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

Полезный, но не значительный, как полный ответ –

Смежные вопросы