This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Re: Global data loaded if symbols aren't resolved
Ian Lance Taylor wrote:
> Marcus Clyne <maccaday@gmail.com> 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.