6

巨大なコードが多数のファイルに分散しています。このコードは現在、通常のmallocを使用しています。

パフォーマンスを向上させるためにJemallocを実装したいと思います。また、Jemallocのメモリプロファイラーを使用して、そのコード内ですべての割り当てがどこでどのように行われているかを正確に把握したいと思います。

私はこれを3週間以上試しています。私を助けてください。

前もって感謝します。

4

2 に答える 2

12

jemallocプレフィックスなしでビルドすると、すべてmallocの関数ファミリが再実装された共有ライブラリが作成されます。

前提:Lin​​ux環境

単一の端末で実行する場合、アプリケーションを実行する前に、環境変数を使用LD_PRELOADしてプリロードできます。jemalloc.so何かのようなもの:

export LD_PRELOAD=$LD_PRELOAD:/path/to/jemalloc-build/lib/jemalloc.so.1

/etc/ld.so.preloadすべてのアプリケーションが変更の影響を受けるように、ライブラリへのパスを含む新しい行をファイルに追加できます。(これは Debian ベースのシステムでは確実に機能しますが、おそらく他のシステムでも機能します)

于 2012-07-17T14:27:03.973 に答える
1

jemalloc を /usr/local にインストールしたため、「通常の」ライブラリ パスから外れています。

インストールでは、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.shIulius が説明した方法と同様の方法を使用していることを確認するために読むことができます。

me@mypc /root #jemalloc-config --help jemalloc がどのようにコンパイルされたかを確認するのに役立ち me@mypc /root #jemalloc-config --version 、jemalloc のバージョンが表示されます。

このようにして、プログラムを再コンパイルすることなく、jemalloc で正しく動作することを確認できます。その後、最終的な決定を下すことができます。

ジョージ。

于 2016-08-14T23:32:31.707 に答える