On Thursday 10 October 2002 12:23, Marc SCHAEFER wrote:

> LD_LIBRARY_PATH sous GNU/Linux et Solaris.

En fait, je rencontre souvent des packages sous Linux qui offrent plusisurs 
possibilit�s pour pr�ciser le *SHLIB_PATH � l'�x�cution. Il est vrai que l'on 
ne devrait pas faire de getenv("MY_SHLIB_PATH) dans son code, mais plut�t 
s'en remettre au standard (avis aux d�velopeurs !).

> dlopen(2), standard sur SYSVR4 et GNU/Linux.

C'�tait aussi le cas sous Solaris depusi longtemps et m�me HP-UX a chang� le 
nom de ses fonctions :-) C'est donc bien LE standard (pardon pour le '_' dans 
le nom de la fonction, �a m'a �chapp�...)

> En fait, il me semble bien que PIC signifie position-independant-code, 

Absolument !

> ce qui en r�gle g�n�rale implique l'utilisation de l'adressage relatif dans
> le code assembleur g�n�r� par le compilateur, ce qui est moins efficace.

Normalement, ceci n'affecte que les symboles 'extern'. CAD, que tous les 
appels de fonctions on jutse un calcul d'adresse supl�mentaire � effectuer 
(ainsi que pour le return()). Il en va de m�me pour les variables globales... 
mais comme tout le mode sait qu'il s'agit d'une pratique "honteuse"... 

Suivant les architectures, cela affecte aussi le passage de param�tres des 
fonctions.

> En th�orie une technique de correction d'adresse/mapping est possible,
> encore que cela impliquerait des tables de saut par processus. Je ne sais
> pas quel est l'�tat de la technique � ce niveau.

Le processeur HP-PA poss�de quelques registres (leur nombre d�pend de la 
version d'HP-PA) permettant de stocker des 'space register value', acc�l�rant 
le calcul des adresses dans ce cas. Le prix � payer est faible dans ce cas 
(~4 cycles). 

Par contre, le fait d'avoir toutes ses librairies en "sahred" induit un gain 
de performance bien plus important qu'il n'y para�t. En effet, la r�duction 
de taille des codes diminue de mani�re imortante la quantit� de code � 
charger dans la m�moire. De plus, cela  r�duit de mani�re drastique pa 
"pression" sur la D-Cache du CPU. L'un dans l'autre, sur un serveur cette 
politique est beaucoup plus favorable. Par contre dans le cas d'une seule 
grosse application de calcul tournant sur une machine d�di�e, il y a une 
l�g�re baisse de performances qui se situe, en g�n�ral, entre 2-5%, iI y a 
bien s�r des cas plus extr�mes mais ils rel�vent plut�t de la d�monstration.

> Une alternative, notamment utilis� par le kernel, est de signer les
> prototypes des fonctions. Lorsqu'un module est ins�r�, il suffit que les
> signatures soient identiques et dans le cas g�n�ral cela suffit pour
> assurer la compatibilit� syntaxique (la compatibilit� s�mantique, ie ce
> que fait r�ellement la fonction est une autre histoire: mais l'on devrait
> bien s�r changer le nom d'une fonction si son r�le change).

J'ai d�velopp� une librairie charg�e de charger les librairies dynamiques et 
de v�rifier la signature des fonctions appel�es. Ainsi je peux donner un 
message claire concernant l'erreur. Ceci implique toutefois que l'on passe 
par la notion "d'interface". CAD, qu'un interface d�fini la correspondance 
entre l'appel de la fonction et sa d�finition. C'est une lourdeur 
supl�mentaire mais le gain est ind�niable en ce qui concerne la qualit� du 
code. Si cela int�resse quelqu'un, pas de probl�me, vous connaissez mon 
adresse e-mail.

Daniel

PS: la librairie est plut�t HP-UX mais devrait se compiler sans autre sous 
Linux, par contre les scripts de l'interface (2) sont en dtksh...(je n'ai pas 
encore fait de version php) :-(


--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question. Ouais, pour se d�sabonner aussi.

Répondre à