Article View: pl.comp.objects
Article #5133Re: Czym ró¿ni siê wróbelek... Czyli podsumowanie
From: pluton
Date: Wed, 10 Mar 1999 00:00
Date: Wed, 10 Mar 1999 00:00
91 lines
4274 bytes
4274 bytes
Cze�� Odpowiadam na zarzuty, postulaty i dorzucam nowe info. 1) r�wnowa�no�� deklaracji >A) KlasaObiekt�w a[10]; >B) x = new KlasaObiekt�w[10]; Napisa�em jasno, �e nie s� r�wnowa�ne. A allokuje pami�� w bloku danych, B na stercie ( heap ). Na stercie 'marnuje' si� troch� pami�ci bo trzeba zapami�ta� na niej, jakiej wielko�ci obszar usun��. Poza tym w wielu implementacjach sterta jest 'ziarnista' - kwantem przydzia�u nie jest bajt ale np. paragraf ( 16 bajt�w ), zapami�tuje si� opr�cz rozmiary zaallokowanego obszaru tak�e inne informacje ( np. wska�nik na pocz�tek 'poprzedniego' obszaru itp. ). Dlatego deklaracje statyczne s� oszcz�dniejsze. 2) konstruktory i destruktory obiekt�w zadeklarowanych w tablicy Z konstruktorami jest o tyle �le, �e sama deklaracja wywo�a konstruktor domy�lny dla ka�dego obiektu, a zindywidualizowanie ( dla ka�dego elementu inny konstruktor ) - to uci��liwa pisanina. Destruktory - b�d� wykonane na pewno, i to dla ka�dego elementu. Wymaga to niew�tpliwie dodatkowej pami�ci, cho�by na kod, kt�ry przeleci n utworzonych obiekt�w i wywo�a ich destruktory. 'Dodatkowy int' nic specjalnie nie da - przecie� rozmiar tablicy jest JAWNIE napisany, i pod koniec t�umaczenia funkcji kompilator zn�w mo�e si�gn�� do tablicy symboli po ten rozmiar. Nie trzeba go dodatkowo zapami�tywa�. Niemniej s� przer�ne implementacje, i mo�liwa jest tak�e i taka, kt�ra tego inta gdzie� wtyka. W C++ 'dodatkowych' bajt�w mo�na spodziewa� si� w ilo�ci du�ej. Do programowania kontroler�w polecam asembler :) 3) co lepsze: skrzyde�ko czy n�ka ? >Zawsze jednak lepiej ( IMHO ) zrobi� new >i delete ni� deklarowa� statycznie. Moja opinia wynika z czystego 16 bitowego sk�pstwa, gdzie stos+blok danych = 64 kb. Obiekt zadeklarowany statycznie �yje ca�y czas i z�era zasoby, nawet je�eli w danym przebiegu programu nie jest w og�le potrzebny. Stos te� bywa czasami ciasny ( je�eli jest du�o napis�w w bloku danych ). Natomiast sterty mi nigdy nie zabrak�o: potrzebuj�-bior� ( ile w danej chwili potrzeba, a nie tyle, ile mi si� podczas pisania zdawa�o �e musz� mie� ), nie potrzebuj� - zwalniam. Je�eli chodzi o szybko�� allokacji na stercie w por�wnaniu ze stosem, to na moim XT 4,77 MHz ( cztery i siedemdziesi�t siedem setnych megaherca ) nie zauwa�y�em specjalnego spowolnienia, ale zawsze mia�em trudno�ci z pomiarem w strefach pikosekundowych, wi�c mo�liwe, �e si� myl�. Je�eli chodzi o komplikacj� programu ( dodatkowa instrukcja if ( allokacja udana ) ... ), to IMHO nie jest ona wielka. A rozmiar programu ? Mo�e rzeczywi�cie obni�enie rozmiaru kodu wynikowego z 2,456,875 bajt�w do 2,456,778 bajt�w ma swoj� warto��. Ja osobi�cie szukam oszcz�dno�ci w innych obszarach. Ponadto polecam r�ne biblioteczki ( np. ZFortify ) kt�re 'przechwytuj�' new i delete. Nowy new allokuje kilkana�cie ( np. 32 ) bajt�w wi�cej ni� ��dano, wype�nia te bajty charakterystycznym 'wzorkiem' i oddaje wska�nik na '�rodek' zaallokowanego obszaru ( pocz�tek plus np. 16 ). Natomiast nowe delete sprawdza, czy charakterystyczny 'wzorek' w dodatkowych 16 pocz�tkowych i w 16 ko�cowych bajtach nie uleg� zatarciu, co �wiadczy�o by o b��dach w kodzie i przekraczaniu dodatkowych zakres�w. Ponadto prowadzenie listy zaallokowanych obszar�w pomo�e wskaza� na ko�cu aplikacji miejsca, dla kt�rych 'zapomnieli�my' o delete do pary z 'new'. -- CUL pluton NA...@jmk.lodz.pl
Technical Details
Message-ID:
<01be6ace$80503560$0100a8c0@california>Path:
mbox-mo1.pugleaf.net!unknown!not-for-mailReferences:
<7c3g46$cud$1@h1.uw.edu.pl>Show Full Headers
Complete Article Headers
From: "pluton" <na...@jmk.lodz.pl> Subject: Re: Czym ró¿ni siê wróbelek... Czyli podsumowanie Date: 1999/03/10 Message-ID: <01be6ace$80503560$0100a8c0@california> X-Deja-AN: 453315327 References: <7c3g46$cud$1@h1.uw.edu.pl> X-Trace: 10 Mar 1999 09:36:32 +0100, ppp-190.lodz.tpnet.pl Newsgroups: pl.comp.lang.c,pl.comp.objects,pl.comp.programming MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit