Newsgroup: it.comp.lang.c
Titolo: liste

Ciao!
avrei bisogno per la mia tesi di una libreria che implementi le liste in
modo robusto (ovvero affidabile...) in C
siccome il programma che edvo realizzare č molto complesso, se
posso evitarmi la mena di fare anche quelle...
lo so che il C++ ha la classe lista, ma siccome questo č l'unico tipo
di dato complesso che mi serve, non mi sembra intelligente passare
ad un linguaggio piů complicato (e sporco...) solo per quello.
se potete aiutarmi...
grazie
--
Carlo

 ad un linguaggio più complicato (e sporco...) solo per quello.
Per quanto io non usi di preferenza il C++, mi e' capitato
di scrivere un programma misto C e C++ in cui c'era una
sola routine in C++ dentro un file cpp. Dovevo solo specificare,
nella routine in C++ che andava chiamata usando le convenzioni
del c.
In pratica l'avevo fatto per confrontare il tempo di sort
di un array di 1 milione di interi usando il qsort del c
o il sort della stl del c++. Essendo questo basato su template
risultava diverse volte piu' veloce.
ciao,
g.

 risultava diverse volte piu' veloce.
Si', ho visto che anche Stroustrup usa questo esempio
per imostrare la velocita' del C++.
Puoi spiegarmi a cosa e' dovuta la differenza di velocita' ?
Funzione di confronto inlined ?
Copia dei dati pu' veloce ?
O altro ?
Grazie
Emilio

 O altro ?
Ciao tutti,
la butto lì:
non credo che la velocità sia dovuta all'utilizzo di templete, infatti
questi fanno un largo uso di puntatori rallentando l'accesso ai dati.
La velocità, secondo me, è data sia dalla struttura in cui vengono
archiviati i dati, sia dall'algoritmo implementato per la libreria.
ciao
Alfedo
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 archiviati i dati, sia dall'algoritmo implementato per la libreria.
Mah, la cosa andrebbe studiata in dettaglio.
Io ho l'impressione che il template per il sort di
un tipo elementare come l'intero non faccia grande uso
di puntatori. Nel caso degli interi si evita proprio
la chiamata ad una funzione di confronto (come invece deve fare
il qsort) e siccome si tratta di un template il compilatore
ha poi modo di ottimizzare il codice prodotto, di modo tale
per ogni confronto deve fare solo un confronto tra due interi,
mentre col qsort deve fare una chiamata di funzione.
Probabilmente, se uno confronta dati piu' strutturati
il divario tra sort (c++) e qsort (c) cala, visto che
in questo caso probabilmente tutti e due devono invocare
una funzione definita dall'utente per il confronto.
L'algoritmo presumo sia in entrambi casi il quicksort, anche
se dando una occhiata all'occupazione di memoria avevo quasi
l'impressione che il qsort del gcc 2.95 allochi parecchia memoria
durante l'esecuzione (anche non so perche').
Putroppo e' una prova che ho fatto diverso tempo fa e non mi
ricordo bene i dettagli.
ciao,
g.

| non esiste un modo robusto  un modo non robusto.
| Esiste un modo corretto ed un modo sbagliato.
è vero...
per me robusto è sinonimo di giusto, sicuro e senza loop infiniti
;-)
il programma che devo fare ottimizza un insieme di funzioni a n
variabili.
le liste devono contenere appunto tali variabili (ed eventualmente
le funzioni)
poichè il numero di variabili è dato da file di input a runtime e
utilizzare malloc e calloc è il modo più sicuro per causare dei
memory leak, pensavo di utilizzare delle liste...
| Gli elementi della lista hanno tutti la medesima struttura e la
| medesima dimensione ?
le variabili in generale sono dei float, al massimo dei double, ma
penso che i float bastino...
ogni variabile ha il suo posto, ovviamente (nel senso che devo
poter accedere PROPRIO a quella variabile)
| Quali operazioni devi implementare sulle liste ?
direi che per ogni variabile dev'essere definito un metodo di
codifica (in notazione decimale, binaria...)
| E in tal caso che dimensione approssimativa hanno le liste.
la dimensione come ti dicevo non è fissata a priori.. ma non penso
che si andrà al di là di 5 o 6 variabili...
poi ovviamente dipende dal problema.
a dire la verità, la questione C o C++ è un po' un problema
diverso...
il mio relatore dirige una serie di progetti, di varia grandezza,
nei quali si utilizzano vari linguaggi comparati..
e la conclusione a cui sono arrivati è che il C++ è il caso di non
utilizzarlo, per quanto veloce e pratico possa sembrare..
e quindi uso il C...
grazie per la collaborazione
Carlo

 memory leak
Utilizzare malloc() e calloc() *nel modo sbagliato* e` il sistema piu` 
sicuro per causare memory leak (e` anche l'unico modo, in C).
-- 
Enrico `Trippo' Porreca

 poi ovviamente dipende dal problema.
Allora, se proprio ti mettono a disagio malloc e compagnia, alloca 
staticamente un bell'array di 10 double o 10 struct che contengano tutti
i dati relativi alla tua variabile e non ci pensi piu',
salvo mettere un controllino iniziale che blocca il programma se
a run-time ti chiede piu' di 10 variabili.
Non e' che sprecare una manciata di bytes sia un delitto, di
questi tempi.
Perche' vuoi complicarti la vita con le liste ?
Scusa se ti sono sembrato troppo presupponente e professorale,
ciao,
g.

Secondo me non sai bene cosa sia una lista ne come si implementi.
Forse non sai nenanche cosa sia la memoria dinamica
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:fc96f2549499bc6e0e7...@mygate.mailgate.org...
