Newsgroup: it.comp.lang.c
Titolo: Allocazione dinamica di Array

Mi presento, sono un ragazzo di 18 anni che si č appena avvicinato allo
studio del c (in proprio), provengo da linguaggi come Basic e VB.
sulla strada della mia formazione mi si č posto un quesito:
posso tramite la funzione malloc allocare memoria necessaria ad un array
mano mano che il programma procede?
Sarň piů chiaro, ho sviluppato un semplice programma per calcolare tutti i
numeri primi tra 0 e un numero max, man mano che il programma procede deve
riempire un array di tutti i numeri primi trovati, perciň ogni volta che
trova un numero primo alloca lo spazio necessario a inserirlo nell'array e
lo inserisce.
si puň fare?
Comporta rallentamenti a causa della continua allocazione di memoria o forze
conviene allocare all'array tanto spazio quanto quello occupato da
Max*sizeof(int).
Spero prendiate in considerazione la mia domanda
Saluti
--
Filosganga
E_Mail: Filosga...@Flashnet.it
ICQ: #28861192
--
~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
Filosganga
E_Mail: Filosga...@Flashnet.it
ICQ: #28861192


~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
Filosganga
E_Mail: Filosga...@Flashnet.it
ICQ: #28861192
Prendete Win98!
Lo avete preso?
Bene ora dirigetevi
Accanto la cucina ci dovrebbe essere una cosa chiamata cesso, a questo punto
buttatecelo dentro e tirate lo sciacquone. :-)

Max*sizeof(int).
Credo proprio di si'.


 ICQ #34602650



mano mano che il programma procede?
non potresti usare una simpatica lista?

non potresti usare una simpatica lista?
Per implementare una lista ci vogliono almeno 5 byte per record sulla
mia macchina, almeno 1 per i dati ed almeno 4 per il puntatore al
record successivo.
A fronte di un array di 1000 elementi, memorizzare 5000 byte di
informazione rispetto a 1000 byte mi sembra uno spreco notevole.
Non solo : con una lista non si sfrutta l'accesso indicizzato.

 non potresti usare una simpatica lista?
Ci sono due "controindicazioni":
- lo spreco di memoria, ogni elemento richiede un puntatore per la
gestione
- la frammentazione della memoria allocata. Con un vettore hai sempre un
unico blocco, con una lista hai n blocchi. Se n comincia ad avere 4 o 5
cifre... qualche sistema operativo si incarta :-) (il DOS di sicuro).


 wrote in message
3739e6a9...@news.tin.it...



 cifre... qualche sistema operativo si incarta :-) (il DOS di sicuro).
questo potrebbe essere un vantaggio, non il dos che si incarta, ma la
frammentazione. Potendo allocare un elemento della lista dove ti pare
sei praticamente sicuro di trovare sempre spazio, invece per un blocco
contiguo di grandi dimensioni, potresti avere dei problemi.
Ciao, Luca.
-- 
*******************************************************
       "Dio non e' morto.
        E' vivo e sta lavorando
        a un progetto
        meno ambizioso"
				    graffito anonimo
  Reply to 
bia...@maganet.net
*******************************************************

 
senno' ci sono i buoni vecchi "vector" del C++, che si riallocano
loro se c'e' bisogno...
Una soluzione potrebbe essere anche quella di studiarsi un po' come sono 
costruiti questi vector, e reimplementare una cosa simile (magari 
semplificata) in C.
Ad esempio, quando e' necessario creare nuovo spazio, mi pare che
si "allarghino" della meta' della loro dimensione.
Non ho idea del perche', ma suppongo ci sia una giustificazione
piu' che soddisfacente.
Nel tuo caso potresti definire inizialmente l'array con una dimensione
"normale" (in base al programma, a quello che ci farai con l'array).
Se poi ci fosse bisogno di un riallocamento, potresti sfruttare il
realloc(), ma aumentando la dimensione in modo approppriato, cosi'
da non eccedere con l'uso di realloc().
Ciao ;-)
-- 
Emanuele Cesena		
http://www.geocities.com/SilionValley/Grid/8879
ami...@iol.it
				    Attenti all'antispam NOSPAM
"3. Parla con autorita', ma soltanto di fatti ovvi e comprovati", dal
decalogo di Spark per il giovane manager