问题标签 [tcmalloc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
2454 浏览

c++ - tcmalloc/jemalloc 在 windows 7 系统 malloc 上的性能

我已经用 tcmalloc 和 jemalloc 替换了 Windows 7 的系统分配器,但我发现系统分配器在多线程应用程序上表现更好。在 tcmalloc 的情况下,在运行 8 个线程时,系统分配在 malloc 和自由操作中的速度似乎快了 10%。我使用 Intel 的 vtune 进行分析。是否有任何研究将 windows 分配器与其他分配器进行比较,或者我需要对这些分配器进行某种调整以改善结果?

0 投票
2 回答
523 浏览

linux - 每个进程的虚拟内存统计信息

我正在处理一个非常奇怪的内存泄漏问题,这导致了以下问题。我的系统上正在运行一个进程,它在执行特定操作后会增加其虚拟内存大小。现在,为了确认问题不是内存泄漏问题,我想获取有关由当前运行时的进程。我知道 vmstat 命令为整个系统提供相同的统计信息。但是为了我的确认,我需要一个每个进程的 vmstat 命令。 有谁知道如何做到这一点?

0 投票
0 回答
503 浏览

c++ - 涉及 __unregister_atfork 和 TCMalloc 的程序死锁

考虑以下 C++ 程序。我希望调用的第一个线程exit将终止程序。这就是我用g++ -g test.cxx -lpthread. 但是,当我链接到 TCMalloc ( g++ -g test.cxx -lpthread -ltcmalloc) 时,它会挂起。为什么?

检查堆栈帧表明,第一个调用的线程exit卡在__unregister_atfork等待某种引用计数变量达到 0。由于它之前获得了互斥锁,所有其他线程都陷入了死锁。我的猜测是 betweek tcmalloc 的 atfork 处理程序和我的代码之间存在某种交互。

使用 gperftools 2.0 在 CentOS 6.4 上测试。

编辑:我认为问题可能exit是不是线程安全的。根据POSIXexit是线程安全的。但是,glibc 文档指出这不是exit线程安全的。

0 投票
2 回答
1303 浏览

c++ - 使用 tcmalloc - 如何正确加载 malloc 扩展?

在文件 gperftools-2.2.1/src/gperftools/malloc_extension.h 中,它显示:

我的问题是如何通过虚拟基类访问这些扩展?

通常要从动态库中加载一个类,我需要编写一个基类,它允许我通过多态性获取所需类的实例及其函数,如此所述。

然而,要做到这一点,API 中必须有一些可用的类工厂函数,但在任何 tcmalloc 文件中都没有这样的函数。此外,我还需要使用 dlopen() 加载 tcmalloc 库,根据安装说明不建议这样做:

...通过 dlopen 加载 malloc 替换库在任何情况下都是自找麻烦:一些数据将分配给一个 malloc,一些数据将分配给另一个。

因此,显然不能通过上述典型方式访问扩展。我可以使用 malloc_extensions_c.h 中声明的 C 版本,但只是想知道是否有更好的解决方案。

0 投票
2 回答
1351 浏览

c++ - 是否存在不将元数据存储在其分配中的自定义内存分配器设计模式?

基本上,我需要一个内存池来快速分配小对象。理想情况下,我想用 cudaMalloc 替换主机上的分配,以及 GPU 上分配的内存。我可以自己写,如果必须的话我会写,但我不介意换一个可靠的开源实现。

唯一的问题是,使用 cudaMalloc,内存池无法触及分配的内存。我的理解是,许多(全部?)常见的内存分配器,如标题中的那些,在分配的数据中存储少量元数据。因此他们不会工作。

有谁知道不是这种情况的内存分配器?

0 投票
1 回答
1556 浏览

c++ - 使用 tcmalloc 的 C/C++

我一直在尝试使用 tcmalloc 编译我的应用程序。因此,按照使用说明中的建议,我将附加-ltcmalloc到我的编译器标志中。重新运行我的应用程序后,我看不到任何性能差异。

如何检查对 malloc 的调用是否已像此问题的作者提到的那样被替换。我查看了编译后的汇编代码,但仍有对 malloc 的调用。

提前致谢

0 投票
5 回答
29715 浏览

tcmalloc - 如何使用 TCMalloc?

首先,我想知道如何TCmalloc在 Ubuntu 中安装。然后我需要一个程序使用TCmalloc. 然后我需要一个小程序来证明它TCmallocPTmalloc.

0 投票
1 回答
1512 浏览

c++ - 使用 tcmalloc 库覆盖全局 new/delete 和 malloc/free

我想覆盖 new/delete 和 malloc/free。我的应用程序中链接了 tcmalloc 库。我的目标是添加统计数据。

从新开始,我打电话给 malloc。下面是一个全局示例。

新/删除覆盖工作正常。

我的问题是我直接使用 malloc 的其他文件会发生什么情况

这个 malloc 调用如何解释为我的宏不在头文件中。

0 投票
0 回答
912 浏览

c - nginx编译用jemalloc还是tcmalloc内存管理更厉害?

我正在尝试自己编译 NGINX,并看到它使用的是自己在 malloc 之上的内存分配:ngx_alloc 和 ngx_calloc。

用 jemalloc 或 tcmalloc 内存管理替换 ngx_alloc 和 ngx_calloc 是个好主意吗?

0 投票
1 回答
372 浏览

c++ - 为什么 tcmalloc 不打印通过 dlopen 提供的函数名称

我有下一个项目:main.cpp

共享.cpp:

和生成文件:

我使用 tcmalloc 调试这个测试程序,它动态加载 libshared.so:foo 并执行 it.run 命令: LD_PRELOAD=/usr/local/lib/libtcmalloc.so HEAPCHECK=normal ./a.out

1 最大的泄漏:

  • 使用本地文件 ./a.out。
  • 从以下位置分配的 1 个对象中泄漏 40 个字节:
  • @ 7fe3460bd9ba 0x00007fe3460bd9ba
  • @ 400b43 主要
  • @ 7fe346c33ec5 __libc_start_main
  • @ 400999 _开始
  • @0 _init

为什么我在 foo 函数中得到地址 0x00007fe3460bd9ba 而不是 line?请帮忙

Ps 我尝试将 gdb 与 LD_PRELOAD=.../tcmalloc.so 一起使用,但我得到:“有人正在 ptrace() 向我们发送消息;将自行关闭关闭 perftools 堆泄漏检查”