[Précédent (date)] [Suivant (date)] [Précédent (sujet)] [Suivant (sujet)] [Index par date] [Index par sujet]
Re: Programme + librairie statique
- To:
- Subject: Re: Programme + librairie statique
- From: Charles Levert <>
- Date: Tue, 20 Jul 1999 01:23:19 -0400
-
In-reply-to: <[email protected]>
[email protected] (Pascal Forget) écrit :
> J'ai une librairie libxxx.a (statique) et libxxx.so
> (la version shared).
>
> Si je fais un programme qui link la version statique,
> l'executable est 28kb, et Top rapporte que chaque
> instance du programme occupe 0.2% de la memoire
> (j'ai 192 Mb PC100 SDRAM)
>
> Si j'utilise la librairie libxxx.so, l'executable
> n'est plus que de 7kb, mais Top rapporte que
> chaque instance occupe 0.3% de la memoire.
>
> Je pensais que les shared libraries etaient supposees
> economiser la memoire. Si quelqu'un pouvait m'expliquer,
> ca serait interessant!
Ce qui est sûr :
· la version dynamique du programme prend moins d'espace sur
le disque (sans aborder ici la mémoire) ;
· elle est plus longue à exécuter à cause de l'étape de lien
dynamique.
La commande size est utile pour connaître en détail la taille des
différent segments d'un programme (mieux que ls -l qui rapporte tout y
compris l'info générée par -g à la compilation et strip-able qui n'est
pas chargée en mémoire à l'exécution, je crois).
Maintenant, s'il y a un seul processus de ce programme qui s'exécute,
celui qui est dynamique sera un peu plus gros en mémoire car il
contient ld.so (à moins qu'il ne s'en débarasse quand il n'en a plus
besoin, mais j'en doute).
S'il y a plusieurs processus identiques et qu'ils ont été créés par un
fork, Linux travaille entièrement au niveau des pages et fait du
copy-on-write. (Une chance, sinon la séquence fork-exec ne serait
vraiment pas efficace.) Linux ne travaille pas au niveau des
processus à cette fin, ni pour le « swapping » qui est en fait du
paging. Si des processus du même programme ont été créés séparément,
je ne sais pas si un partage est possible sous Linux. Les vieux unix
utilisaient le « sticky bit » (chmod +1000) sur les exécutables comme
ordre d'utiliser la même copie mémoire, mais je ne crois pas que ce
bit serve encore (sauf pour les répertoires, mais il n'a pas la même
signification alors).
La dernière chose à considérer, et j'ignore aussi la réponse, est le
cas où des pages de mémoire sont bel et bien partagées entre processus
initialement identiques. Que rapportent top et ps ? Est-ce qu'ils
ajoutent ce terme à tous les totaux de mémoire de chacun des
processus ? Sinon, divisent-ils également cette mémoire partagée
entre totaux, ou l'attribuent-ils uniquement au plus ancien de ces
processus ? Ça pourrait entièrement biaiser notre vision du partage
réel de la mémoire à traveurs ces utilitaires.
Charles