2016-09-19 4 views
0

lib에는 구글의 TCMalloc을 연결합니다.
HeapAlloc() 및 HeapFree()를 제외하고 VS2010 프로젝트에서는 제대로 작동하지만 해결되지 않은 문제로 인해 VS2015 프로젝트에서 사용할 수 없습니다. Open Issues. 윈도우 추가 정보는 tcmalloc 사용하려면이 다른 방법을 설명 : 위의 모든 정적의 libc와 응용 프로그램에 연결 한 다음 tcmalloc과의 malloc을 교체하는 것입니다안전한 방법은 내가 메커니즘 <a href="https://raw.githubusercontent.com/gperftools/gperftools/master/src/windows/patch_functions.cc" rel="nofollow">patch_functions.cc</a> 패치 런타임이 프로덕션 환경에서 사용하는 것이 안전하지 않습니다 것을 알아 냈 시험의 일부 일 후


대안에. 따라서 은 프로그램을 정상적으로 빌드하고 연결할 수 있습니다. tcmalloc 지원 은 사후 처리 단계로 제공됩니다. 이것은 더 많은 작업을 설정할 수 있지만, (본질적으로 취약 실행시 패치에 따라 다름) 위의 기술보다 더 신뢰할 수있다. 자세한 내용은 불행하게도 제공된 사장님은 urechable이다 구글이 그룹을 폐쇄 한 것으로 보인다 https://groups.google.com/group/google-perftools/browse_thread/thread/41cd3710af85e57b


참조하십시오.

사람은 어떻게하는지 설명해 주시겠습니까?

답변

1

나는 당신의 자신의 malloctcmalloc을 사용하는 작성하는 제안 가정합니다. 건물 시스템 또는 링커에 따라 : 그래서 당신이됩니다 을 정의하고 (작성 또는 번역 단위 일명이 .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

유용하지만 전체 답변으로 상당한하지 –