问题标签 [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.
c++ - tcmalloc/jemalloc 在 windows 7 系统 malloc 上的性能
我已经用 tcmalloc 和 jemalloc 替换了 Windows 7 的系统分配器,但我发现系统分配器在多线程应用程序上表现更好。在 tcmalloc 的情况下,在运行 8 个线程时,系统分配在 malloc 和自由操作中的速度似乎快了 10%。我使用 Intel 的 vtune 进行分析。是否有任何研究将 windows 分配器与其他分配器进行比较,或者我需要对这些分配器进行某种调整以改善结果?
linux - 每个进程的虚拟内存统计信息
我正在处理一个非常奇怪的内存泄漏问题,这导致了以下问题。我的系统上正在运行一个进程,它在执行特定操作后会增加其虚拟内存大小。现在,为了确认问题不是内存泄漏问题,我想获取有关由当前运行时的进程。我知道 vmstat 命令为整个系统提供相同的统计信息。但是为了我的确认,我需要一个每个进程的 vmstat 命令。 有谁知道如何做到这一点?
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
是不是线程安全的。根据POSIX,exit
是线程安全的。但是,glibc 文档指出这不是exit
线程安全的。
c++ - 使用 tcmalloc - 如何正确加载 malloc 扩展?
在文件 gperftools-2.2.1/src/gperftools/malloc_extension.h 中,它显示:
我的问题是如何通过虚拟基类访问这些扩展?
通常要从动态库中加载一个类,我需要编写一个基类,它允许我通过多态性获取所需类的实例及其函数,如此处所述。
然而,要做到这一点,API 中必须有一些可用的类工厂函数,但在任何 tcmalloc 文件中都没有这样的函数。此外,我还需要使用 dlopen() 加载 tcmalloc 库,根据安装说明不建议这样做:
...通过 dlopen 加载 malloc 替换库在任何情况下都是自找麻烦:一些数据将分配给一个 malloc,一些数据将分配给另一个。
因此,显然不能通过上述典型方式访问扩展。我可以使用 malloc_extensions_c.h 中声明的 C 版本,但只是想知道是否有更好的解决方案。
c++ - 是否存在不将元数据存储在其分配中的自定义内存分配器设计模式?
基本上,我需要一个内存池来快速分配小对象。理想情况下,我想用 cudaMalloc 替换主机上的分配,以及 GPU 上分配的内存。我可以自己写,如果必须的话我会写,但我不介意换一个可靠的开源实现。
唯一的问题是,使用 cudaMalloc,内存池无法触及分配的内存。我的理解是,许多(全部?)常见的内存分配器,如标题中的那些,在分配的数据中存储少量元数据。因此他们不会工作。
有谁知道不是这种情况的内存分配器?
c++ - 使用 tcmalloc 的 C/C++
我一直在尝试使用 tcmalloc 编译我的应用程序。因此,按照使用说明中的建议,我将附加-ltcmalloc
到我的编译器标志中。重新运行我的应用程序后,我看不到任何性能差异。
如何检查对 malloc 的调用是否已像此问题的作者提到的那样被替换。我查看了编译后的汇编代码,但仍有对 malloc 的调用。
提前致谢
tcmalloc - 如何使用 TCMalloc?
首先,我想知道如何TCmalloc
在 Ubuntu 中安装。然后我需要一个程序使用TCmalloc
. 然后我需要一个小程序来证明它TCmalloc
比PTmalloc
.
c++ - 使用 tcmalloc 库覆盖全局 new/delete 和 malloc/free
我想覆盖 new/delete 和 malloc/free。我的应用程序中链接了 tcmalloc 库。我的目标是添加统计数据。
从新开始,我打电话给 malloc。下面是一个全局示例。
新/删除覆盖工作正常。
我的问题是我直接使用 malloc 的其他文件会发生什么情况
这个 malloc 调用如何解释为我的宏不在头文件中。
c - nginx编译用jemalloc还是tcmalloc内存管理更厉害?
我正在尝试自己编译 NGINX,并看到它使用的是自己在 malloc 之上的内存分配:ngx_alloc 和 ngx_calloc。
用 jemalloc 或 tcmalloc 内存管理替换 ngx_alloc 和 ngx_calloc 是个好主意吗?
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 堆泄漏检查”