6

我有一个庞大的代码分布在许多文件中。此代码当前使用普通 malloc。

我想在其中实现 Jemalloc 以获得更好的性能,并且我还想使用 Jemalloc 的内存分析器来了解每个分配在该代码中是如何以及在何处发生的。

我正在尝试这个超过 3 周。请帮我。

提前致谢。

4

2 回答 2

12

在没有任何前缀的情况下构建后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 的系统,但也可能适用于其他系统)

于 2012-07-17T14:27:03.973 回答
1

我已经在 /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 一起正常工作,而无需重新编译它们。然后,您可以做出最终决定。

乔治。

于 2016-08-14T23:32:31.707 回答