Stachu 'Dozzie' K.
5/1/2007 10:54:00 PM
On 01.05.2007, Jacek Czerwinski <x@y.z.pl> wrote:
> Dnia Tue, 01 May 2007 23:54:56 +0200, Marcin 'Qrczak' Kowalczyk napisau(a):
>
>> Dnia 01-05-2007, wto o godzinie 23:45 +0200, Jacek Czerwinski
>> napisau(a):
>>
>>> Akurat biblioteki dynamiczne nie za bardzo sa przykuadem oszczednego
>>> uýycia RAM-u. Uýycie, rzekueú , funkcji gotoxy wartoúci 0,5kB, z
>>> koniecznym i automatycznie pociaganym moduuem inicjujacym 5kB dawauo w
>>> statycznych bilbiotekach 5,5kB (oczywiúcie przykuadowo). Ale jeúli sa
>>> one w DLL 'wagi' 1.5MB, uruchamiany jest cauy DLL.
>>
>> Co to znaczy Yuruchamiany!? W normalnym systemie operacyjnym kod
>> biblioteki nie jest uadowany do pamiaci od razu, tylko po kawauku
>> uadowany jest ten kod, który jest uýywany.
> uadowany jest moduu w tym sensie, w jakim go zrobiu linker. Jeúli linker
> zrobiu mniej-wiacej monolit, to jest jednostka uadowania. Myúla (nie mam
> dowodów) ýe równie duýo lub wiacej jest nieoptymalizowanych DLL z
> nieoptymalizujacych tego kompilatorów/linkerów (lub bo ktos nie dau
> odpowienich wsadów).
> Loader nie ma ýadnego prawa (nie wyobraýam tego sobie) zauadowania czaúci
> (tak pojatego) moduuu, musi cauoúa.
Owszem, ma prawo. Pod Linuksem na ten przyk3ad odczytywany jest nag3ówek
biblioteki dynamicznej, w którym jest tablica eksportowanych symboli.
Z takiej tablicy odczytywane jest, ile zawarto?ci pliku nale?y zamapowaa
do pamieci procesu u?ywaj?cego biblioteki.
Poza tym pomijasz fakt, ?e kod biblioteki to na ogó3 kod
readonly-executable, wiec mo?e bya bezkarnie u?ywany przez kilka ró?nych
procesów, wiec dobrze skompilowana biblioteka jest 3adowana jeden raz,
a u?ywana przez wiele procesów jednocze?nie.
--
Secunia non olet.
Stanislaw Klekot