Shared libraries are not necessary
Masataka Ohta
mohta at necom830.cc.titech.ac.jp
Mon Jun 3 12:01:11 AEST 1991
In article <9613 at sail.LABS.TEK.COM> terryl at sail.LABS.TEK.COM writes:
>+If, as if often the case, we are running only one X applications, you
>+lose.
>
> Maybe in your idealized world that is true, but I can assure you out in
>the REAL world, MANY X applications are running at once, not one at a time.
Your "the REAL world" is only a part of the real world.
I'm in the real world and not using window systems at all.
Moreover, along this discussion, several people said that they are using X
just because they want multiple terminal windows at once.
>Here's a partial ps listing of a local workstation running X:
>I count 5 different X applications running (xdm, xterm, mwm, xclock, xeyes),
>plus the server (listed as X in the above listing).
On the other hand, you are the only person who has done this. No other
people, who say they require many X applications, have shown what they
are running.
And, even you have not yet shown the result of 'ldd' and 'size'.
Without that, you can say nothing.
Please be technical.
> do you have ANY facts to back up the claim that you seem to making??
>The claim is "If a shared library is used, ALL of the space of the shared
>library(at least the text) will be loaded in the executable image". I make this
>claim by adding together the text sizes of the shared libraries, along with the
>text size of the original object file, and that's my interpretation of what you
>are saying.
You misinterpreted what I wrote.
>+Though not all functions in 1.56Mbytes are actually called, most pages
>+are swapped in if at least one function in the same page is called.
> Again, I'll ask you to provide some facts (and preferably figures, too)
>to back up your claim "most pages ... same page is called". Given a reasonable
>virutal memory subsystem, I doubt that this is true.
It is obvious. As I counted, there are 479 functions defined and 250 object
modules (*.o files) 'ar'ed in libX11.a. The text size of libX11.a is about
180K. Thus, the average code size of a object module is about 720 bytes. If
you have 8K page (a reasonable virtual memory subsystem, 16K might be more
common), a typical page contains about 11 object modules.
If you use 20% of modules (1 in 5 modules), unless there is strong
correlation on calling pattern of library routines (most of strong correlation
is already used up as strongly correlated functions are often already packed
in a single object module), and unless you reorder object modules in the
library, almost all text pages are swapped in.
By using the (possibly non-existing) above correlation, you might be able
to reduce memory consumption. And still, the same thing can be done a lot
better with statically linked text, as even when there is no specific pattern
as a shared library, there may be specific pattern as a private library
of each program.
Unshared shared libraries always use more real memory than statically
linked ones.
Judging from the measurement result of the REAL system:
>+According to his data, total text space required for xvserver is:
>+ 940Kbytes without shared libraries
>+and
>+ 1560Kbytes with shared libraries.
the ratio is, perhaps, near 1:1.5.
Masataka Ohta
More information about the Comp.unix.internals
mailing list