Article View: pl.comp.objects
Article #4972Re: Glos na temat Javy
From: Sektor van Skijlen
Date: Thu, 18 Feb 1999 16:38
Date: Thu, 18 Feb 1999 16:38
74 lines
3579 bytes
3579 bytes
W ostatnim odcinku, Andrzej Lewandowski naskrobal:
: Prosze zwrocic uwage na to ze w "prawdziwych" problemach czasu
: rezczywistego nawet zwykly, porzadny alloc uwaza sie za
: niedeterministyczny. I slusznie bowiem alloc przeszukuje liste blokow
: wolnych az znajdzie odpowiedni. Jak dluga ta lista bedzie, nikt nie
: wie.
Jest tez na to sposob, ktory widzialem w ostatniej wersji UltraEnvy. Nawet sam
do tego dorobilem pare podobnych kawalkow. Jest napisany w C, ale to nie
przeszkadza (C++ to dopiero dalby tu mozliwosci!). Wyglada to tak:
1. Kazda struktura, ktorej obiekty sa czesto przydzielane i zwalniana, oraz
trzymane w liscie ma swoj wskaznik na liste aktualnych i liste wolnych blokow:
Affect* affect_list;
Affect* affect_free;
2. Dodanie obiektu do listy polega na przydzieleniu mu pamieci i zainicjowaniu
go. Wykonuje to jedna z funkcji new_*():
Affect* new_affect( void )
{
Affect* aff;
if ( !affect_free )
aff = alloc_perm( sizeof *aff );
else
{
aff = affect_free;
affect_free = affect_free->next;
}
bzero( aff, sizeof *aff );
}
Funkcja alloc_perm jest tu funkcja, ktora przydziela pamiec, ale juz jej nie
zwalnia. W sumie moznaby tez zastapic ja przez malloc().
Jak widac, funkcja alloc_perm jest tutaj wywolywana tylko dla pierwszych
obiektow, bo pozniej ich zwalnianie wyglada w ten sposob:
void free_affect( Affect * pAf )
{
pAf->next = affect_free;
affect_free = pAf;
}
Jest tez oczywiscie wada tego rozwiazania. Polega ona mianowicie na tym, ze
zawsze program zajmuje maksymalna ilosc pamieci. Oczywiscie zysk na
efektywnosci tutaj jest ogromny, a to jest akurat aplikacja, ktora nie
przesadza z iloscia obiektow dynamicznych i co chwila je tworzy i usuwa.
Jasne jest jednak, ze srednio sie to do wielu rzeczy nadaje (np. wlasnie do
systemow czasu rzeczywistego).
: najchetniej uzywana struktura danych w takich systemach jest tablica.
: Struktury dynamiczne takie jak listy sa bowiem nieprzewidywalne pod
: wzgledem czasu wykonywanych na nich operacji.
Jasne, ale tablice niestety nie sa tak dynamiczne i nielatwo sie je rozszerza.
We wspomnianej aplikacji, w celu przyspieszenia znajdowania obiektow wg
klucza, obiekty, ktore maja byc wg tego klucza szukane, sa "pozawieszane" na
wskaznikach z hash_table.
: Polecam nastepujace [...]
Dziekuje.
--
... Win tarquen yre aubenk aerden jen backieten
Fer napern ta seimen eim van yre broust...
... Michal 'Sektor' Malecki <mmalecki@technologist.com>
... Politechnika (jeszcze) Lodzka, Elektrotechnika/Informatyka Stosowana
Technical Details
Message-ID:
<7ahfle$fk4$4@polonez.man.lodz.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!agh.edu.pl!news.wnaft.agh.edu.pl!news.memax.krakow.pl!paa.gov.pl!news.swierk.pl!news.icm.edu.pl!news.task.gda.pl!news.man.lodz.pl!not-for-mailReferences:
<0328a2336221129CIERNIK@ciernik.onet.pl> <36CB564A.2B570613@interdata.com.pl> <36cb685d.245132@news-s01.ny.us.ibm.net> <36CB82B6.87B83E9E@interdata.com.pl> <36cb9cc8.13664688@news-s01.ny.us.ibm.net> <36CBDCCD.B41AC238@netcom.com> <36CBF5E2.25B9025C@ipipan.waw.pl> <36cc1147.351225@news-s01.ny.us.ibm.net>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!agh.edu.pl!news.wnaft.agh.edu.pl!news.memax.krakow.pl!paa.gov.pl!news.swierk.pl!news.icm.edu.pl!news.task.gda.pl!news.man.lodz.pl!not-for-mail
From: Sektor van Skijlen <sektor@spam.org>
Newsgroups: pl.comp.objects
Subject: Re: Glos na temat Javy
Date: 18 Feb 1999 16:38:06 GMT
Organization: Metropolitan Area Network in Lodzi
Lines: 74
Message-ID: <7ahfle$fk4$4@polonez.man.lodz.pl>
References: <0328a2336221129CIERNIK@ciernik.onet.pl> <36CB564A.2B570613@interdata.com.pl> <36cb685d.245132@news-s01.ny.us.ibm.net> <36CB82B6.87B83E9E@interdata.com.pl> <36cb9cc8.13664688@news-s01.ny.us.ibm.net> <36CBDCCD.B41AC238@netcom.com> <36CBF5E2.25B9025C@ipipan.waw.pl> <36cc1147.351225@news-s01.ny.us.ibm.net>
NNTP-Posting-Host: zly.kis.p.lodz.pl
User-Agent: tin/pre-1.4-981225 ("Volcane") (UNIX) (SunOS/5.5.1 (i86pc))
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit