を使用して動的ライブラリを開きdlopen
、プログラムが対応する なしで終了した場合dlclose
、参照カウントは減少しますか? そうでない場合、どうなりますか?ライブラリは次回の再起動までロードされたままになりますか?
1 に答える
3
動的ローダーはユーザー空間コードです (linux/glibc の ld.so.1)。実行中のプログラムのユーザー空間にロードされ、他のプロセスとは対話しません。したがって、グローバル参照カウンターはありません。
ただし、動的ライブラリのコードをプロセス間で共有する方法があります。動的ローダーは、mmap() を使用してライブラリ コードをプロセス メモリにロードします。同じライブラリの mmap 化されたデータは、それを使用するすべてのプロセス間で共有されます (これらのデータ ページに何かが書き込まれるまで、COW を使用してデータの独自のコピーが作成されます)。プログラムが終了すると、すべての mmap 領域が解放されます。これは一種の参照カウンターの減少と考えることができます。データ ページのコピーが解放されます。
于 2013-01-16T07:47:08.737 に答える