Re: Global data loaded if symbols aren't resolved

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

 



Ian Lance Taylor wrote:
> Marcus Clyne <maccaday@xxxxxxxxx> writes:
> 
>>>> If a shared object is loaded using dlopen etc and the symbols in its
>>>> object aren't used (specifically they are defined elsewhere already
>>>> inside that process), is the data in the symbols automatically loaded
>>>> into memory or is it skipped (assuming there are no other programs
>>>> using those symbols on the system) and the memory available for other
>>>> purposes?
>>>>     
>>> If you open a shared library with dlopen, then that library is loaded
>>> into memory.  This will use up virtual address space.  If you don't use
>>> the library for anything, then the pages will never be loaded into RAM.
>>>   
>> When the object loaded initially with dlopen(), is there anything
>> that's transferred to RAM (e.g. the page where the symbol names are),
>> or are they only copied to the swap space directly?  If that's the
>> case, are they then loaded into RAM when dlsym() is called?
> 
> Most of a shared library is read-only and shared.  Those pages are
> simply mapped into your virtual address space--no copying occurs.  In a
> typical shared library, a few pages must be modified by the dynamic
> linker when the library is loaded: those pages will be copied into RAM
> and modified, and if not referenced will eventually be swapped out.

The entry point of the library is, I think, called at dlopen() time.

Andrew.


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux