【问题标题】:using tcmalloc with glib将 tcmalloc 与 glib 一起使用
【发布时间】:2011-05-11 09:01:42
【问题描述】:

我想测试使用 Google 的 tcmalloc 可以获得的性能改进。我的程序是使用 glib 提供的大量实用程序(哈希、列表、数组......)构建的。所以我想要的基本上是让glib使用tcmalloc而不是glibc的malloc。

我可以用两种方法解决这个问题:

  1. 通过使用 -tcmalloc 选项编译 glib。
  2. 使用来自glib's memory allocation functions 的g_mem_set_vtable ()。

我其实更喜欢第二个,但我没有找到任何实现它的例子。

有什么提示吗?有什么想法吗?

【问题讨论】:

    标签: c memory-management glib tcmalloc


    【解决方案1】:

    您可以使用LD_PRELOAD method suggested in the tcmalloc documentation。

    或者,在使用任何 glib 函数之前,使用 dlopen(). dlsym()、malloc()、realloc() 和 free() 例程加载 tcmalloc 库,并使用它们初始化 struct GMemVTable。 (假设 tcmalloc calloc() 也更好)。请务必将您不使用的成员初始化为0(C99 命名成员初始化非常适合此操作)。最后拨打g_mem_set_vtable()

    【讨论】:

    • 你最好把calloc也换掉,不然你free的时候就崩溃了,好不好无所谓
    • 不,您不必这样做。如果没有提供,可能 glib 有一个 memzero 操作。
    • 请注意 gperftools 中 INSTALL 文件中的“TCMALLOC AND DLOPEN”部分。它建议在尝试 dlopen 库之前禁用线程本地存储。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    相关资源
    最近更新 更多