我想测试一下通过使用谷歌的tcmalloc可以获得的性能改进。我的程序是使用glib提供的大量实用程序(散列、列表、数组等)构建的。所以我想要的基本上是让glib使用tcmalloc而不是glibc的malloc。
我可以用两种方法来解决这个问题:
-tcmalloc
g_mem_set_vtable ()
我实际上更喜欢第二个,但是我没有找到任何实现它的例子。
有什么提示吗?有什么办法吗?
你可以使用 LD_PRELOAD method suggested in the tcmalloc documentation .
LD_PRELOAD
或者,在使用任何glib函数之前,使用 dlopen() . dlsym() 这个 malloc() , realloc() 和 free() 例程,并初始化 struct GMemVTable 和他们在一起。(假设tcmalloc calloc() 也很好)。确保初始化不使用的成员 0 (C99命名成员初始化非常适合这一点)。最后一个电话 g_mem_set_vtable()
dlopen()
dlsym()
malloc()
realloc()
free()
struct GMemVTable
calloc()
0
g_mem_set_vtable()