tcmalloc的性能非常突出,文章非常之多,对高性能有非常大的追求的,可以用之,而且非常简单---只需要加载DLL,即可。那他是如何完成的呢?
tcmalloc利用了HOOK技术,在DLL中申明了静态变量,代码如下:
#ifndef WIN32_OVERRIDE_ALLOCATORS
static TCMallocGuard module_enter_exit_hook;
#endif
通过他,在TCMallocGuard的构造函数里,完成了PatchAllModules的函数调用。如下图
接下里就是HOOK常规的HeapAlloc、HeapFree、VirtualAllocEx等函数。
首先通过::GetProcAddress(hkernel32, function_info_[i].name);来获取地址。
然后在函数修改在跳转
void* PreamblePatcher::ResolveTargetImpl(unsigned char* target,
unsigned char* stop_before,
bool stop_before_trampoline) {