1

を使用して動的ライブラリを開きdlopen、プログラムが対応する なしで終了した場合dlclose、参照カウントは減少しますか? そうでない場合、どうなりますか?ライブラリは次回の再起動までロードされたままになりますか?

4

1 に答える 1

3

動的ローダーはユーザー空間コードです (linux/glibc の ld.so.1)。実行中のプログラムのユーザー空間にロードされ、他のプロセスとは対話しません。したがって、グローバル参照カウンターはありません。

ただし、動的ライブラリのコードをプロセス間で共有する方法があります。動的ローダーは、mmap() を使用してライブラリ コードをプロセス メモリにロードします。同じライブラリの mmap 化されたデータは、それを使用するすべてのプロセス間で共有されます (これらのデータ ページに何かが書き込まれるまで、COW を使用してデータの独自のコピーが作成されます)。プログラムが終了すると、すべての mmap 領域が解放されます。これは一種の参照カウンターの減少と考えることができます。データ ページのコピーが解放されます。

于 2013-01-16T07:47:08.737 に答える