我有一个庞大的代码分布在许多文件中。此代码当前使用普通 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
带有 lib 路径的新行。(这肯定适用于基于 Debian 的系统,但也可能适用于其他系统)
我已经在 /usr/local 中安装了我的 jemalloc,所以他不在“正常”库路径中。
安装程序为我创建了一个 shell,用于使用 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 一起正常工作,而无需重新编译它们。然后,您可以做出最终决定。
乔治。