tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: dlopen()/dlclose() and memory reclamation



On Wed, Nov 03, 2010 at 03:20:33PM +0000, Sad Clouds wrote:
> As far as I understand, if an application is linked to a set of
> shared libraries, those libraries are loaded on application's start up,
> or whenever the application references symbols in those libraries. Once
> loaded, they remain in memory until application exits.

The ELF object has a list of DT_NEEDED entries. Those are loaded at
start time including dependencies and remain loaded. You can use
"readelf -d" to show them.

> 2. Application calls dlclose() on libA. For each library that libA
> depends on, ld.so recursively checks their dependencies and if no other
> process is using each of those libraries, those libraries get unmapped.
> Finally, ld.so unmaps libA.

This is what happens. Shared objects use a reference counting garbage
collector.

Joerg


Home | Main Index | Thread Index | Old Index