我有一个巨大的代码分布在多个文件上。此代码当前使用普通 malloc。
我想在其中实现 Jemalloc 以获得更好的性能,我还想使用 Jemalloc 的内存分析器来了解每个分配在该代码中发生的确切方式和位置。
我正在尝试这个超过 3 周。请帮助我。
提前谢谢。
在构建没有任何前缀的jemalloc
后,您将拥有一个共享库,其中重新实现了所有malloc
系列函数。
假设:Linux环境
如果应用程序在单个终端中运行,则可以LD_PRELOAD
环境变量在运行应用程序之前预加载jemalloc.so
。像这样:
export LD_PRELOAD=$LD_PRELOAD:/path/to/jemalloc-build/lib/jemalloc.so.1
对于受更改影响的所有应用程序,您可以在文件/etc/ld.so.preload
中添加一个新行,其中包含库的路径。(这在基于 Debian 的系统中肯定有效,但也可能在其他系统上有效)
我已经在/usr/local 中安装了我的 jemalloc,所以他不在"正常"的库路径中。
该装置为我创建了一个外壳,以使用 jemalloc 库启动程序。
在某种程度上,它自动化了 Iulius 上面描述的过程,但它只对我想执行的程序使用 jemalloc。如果这是预期用途,您可以执行以下操作:
首先,检查路径中的某个位置是否存在该小脚本:
me@mypc /root #
which jemalloc.sh
/usr/local/bin/jemalloc.sh
如果存在,您可以简单地以这种方式执行程序:
me@mypc /root #
jemalloc.sh your-program your-program-arguments &
您可以阅读/usr/local/bin/jemalloc.sh
以验证它是否与 Iulius 描述的方式类似。
me@mypc /root #
jemalloc-config --help
将帮助您了解 jemalloc 是如何编译的,并且 me@mypc /root #
jemalloc-config --version
将向您展示您的 jemalloc 版本。
通过这种方式,您可以验证您的程序是否与 jemalloc 一起正常工作,而无需重新编译它们。然后,您可以做出最终决定。
乔治。