Malloc + 2d arrays + C

V13 v13 at priest.com
Wed Mar 20 16:32:01 EET 2002


On Wednesday 20 March 2002 01:41, Christos Ricudis wrote:
> In article <mailman.1016575926.18713.linux-greek-users at lists.hellug.gr>, 
Vasilis Vasaitis wrote:
> >> > 	Xwris na isxurizomai oti gnwrizw C auto pou mou kanei entupwsi einai
> >> > 	i parapanw grammi to 'sizeof(char *) ' ti timi akribws exei????
> >>
> >> Exei thn timh toy fysikou mege8ous enos pointer sthn target
> >> arxitektonikh, poy nomizw oti den einai akribws ayto poy skeftotan o
> >> original author toy sygkekrimenou kwdika prin parei narkwtika.
> >
> >   Αντιθέτως, είναι από τα λίγα πράγματα που ο συγκεκριμένος κώδικας
> > καταφέρνει να κάνει σωστά. Αντί να κάνει malloc() ολόκληρο τον πίνακα,
> > και μετά να χρησιμοποιεί πολλαπλασιασμό (μπλιαχ) για την «διδιάστατη»
> > προσπέλαση, κάνει πρώτα malloc() έναν πίνακα από δείκτες, και σε καθέναν
> > από αυτούς μετά έναν πίνακα από χαρακτήρες. Ή αλλιώς, instant 2D, the C
> > way.
>
> Pragma poy einai o lan8asmenos tropos na ylopoihseis ena disdiastato array,
> otan ta bounds ths deyterhs diastashs einai constant, poso mallon a priori
> gnwsta.

 Den nomizo oti tithetai thema sostoy/lathoys stin periptosi ayti. To mono  
kritirio poy mpenei se tetoies periptoseis, einai oi protheseis poy exeis gia 
tin eikona. To na exeis oli tin eikona se ena komati mnimis, bolebei poly se 
ergasies, oi opoies exoyn na kanoyn me to synolo tis eikonas, mias kai 
yparxei poly megali pithanotita, otan desmeyeis polla mikra kommatia, ayta na 
min einai synexomena stin mnimi. Ayto exei san apotelesma, na exeis px mia 
eikona 64x64 kai na thes na doylepseis se 2 grammes kai na erthoyn apo to 
swap 2x4K anti 1x4K, epidi oi 2 grammes etyxe na briskontai se alli selida. 
(aplo paradeigma). Episis, an thes na aspriseis (px) oli tin eikona na prepei 
na kaleiseis N fores tin memset, mia gia kathe grammi k.o.k. H kalyteri isos 
lysi einai na afineis ton compiler na bgazei to fidi apo tin trypa kapos 
etsi:

typedef char eikona[1024][768];

eikona *p;
p=(eikona *)malloc(sizeof(eikona));
(*p)[1][2]=1;

alla kai pali, analoga ti thes na kaneis.

> Sthn periptwsh toy 'array of N pointers' exeis :
>
> * N memory allocations sto initialization (+ malloc housekeeping)
> * To fetching toy pointer kai mia pros8esh ana access

 Dedomenoy oti einai ligo xlomo na doylevei se 256 xromata panta, yparxei kai 
edo enas pollaplasiasmos.

<<V13>>



More information about the Linux-greek-users mailing list