Newsgroup: it.comp.lang.c++
Titolo: Performance array vs vector<>

Sto sviluppando un'applicazione 3D che fa uso di opengl e volevo sapere se è
meglio, in termini di efficienza, usare array (che ridimensiono
opportunamente se necessario) oppure vector della STL per contenere le
strutture relative ai poligoni, ai vertici degli oggetti 3d ecc...
Considerate che l'efficienza negli accessi in memoria sfruttamento della
cache ecc...sono fondamentali in applicazioni di computer grafica 3d.
I vector sarebbero già pronti però ho letto che non garantiscono nella
implementazione finale che viene rilasciata il fatto che gli oggetti che
contiene siano contigui in memoria.
--
Nexus
ddibar...@tiscalinet.it

contiene siano contigui in memoria.
Mah, forse e' stato cambiato qualcosa e non sono aggiornato, pero' io mi
ricordo che un vector e' implementato in Rogue Wave... quindi dovrebbe
contenere in un primo approccio un certo numero X di elementi (credo 256),
poi se cerchi di aggiungerne altri viene allocata un'area di dimensione
doppia di X e gli elementi nel vecchio vettore vengono copiati in quello
nuovo e via cosi' per tutte le volte che rischi un overflow.
Mi vien da pensare che le aree che vengono allocate permettano di contenere
oggetti in modo contiguo...
Ciao

 contenere in un primo approccio un certo numero X di elementi (credo 256),
per stabilirne la dimensione iniziale si può usare il costruttore:
vector(size_type n) ,  oppure, vector(size_type n,  const T& t) ;
ciao.

 che contiene siano contigui in memoria.
L'assenza di un esplicito requisito di contiguità nello Standard è stato
considerato un "defect" e verrà corretto nella prossima versione. Nel
frattempo, è normalmente considerato "safe" assumere che le
implementazioni di std::vector<> garantiscano tale contiguità. (Nota che
questo *non* equivale comunque ad assumere che std::vector<T>::iterator
sia un typedef per T*.)
 
http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/lwg-defects.html#69
Max

 sia un typedef per T*.)
allora credo che userò gli array soliti implementando metodi di resize
appositi, magari ottimizzati per la mia applicazione...meglio.
purtroppo in applicazioni di computer grafica dove l'efficienza temporare e
a volte anche spaziale è tutto il fatto che gli elementi siano contigui è
importante e non basta dire..."assumete cmq nel frattempo che lo sia"...
Grazie a tutti
ciao
Daniele Di Bartolomei
ddibar...@tiscalinet.it

 che contiene siano contigui in memoria.
questo e` falso; lo standard garantisce proprio il contrario: gli oggetti 
saranno contigui in memoria.
ciao Anto
-- 
Antonio Cuni, 20 anni, studente
Brainbench C++ Master: 4.73, higher than 99% of all previous test takers.
C Language: 3.79, higher than 92% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it



Non so se è una buona idea. Ritengo sia perfettamente sicuro dare per
scontato che siano contigui. In primo luogo, questa era l'intenzione del
comitato, anche se nello Standard questo non è stato espresso chiaramente.
In secondo luogo, tutte le implementazioni attuali (che io sappia)
garantiscono tale requisito e, visto che esiste un Defect Report, è
impensabile che qualche implementazione futura non lo faccia.
Ad ogni modo, se vuoi scrivere una tua classe, ti consiglio di dotarla di
un'interfaccia compile-time compatibile con quella di std::vector e usare
un typedef. Ciò ti consentirà, con una singola modifica, di ottenere due
versioni del programma e confrontare le prestazioni di una e dell'altra
soluzione.
Max

 appositi, magari ottimizzati per la mia applicazione...meglio.
non credo che sia una scelta saggia: personalmente non conosco libreria 
standard in cui std::vector sia implementato diversamente da un array. 
Conviene *prima* usare il vector gia` fatto e poi, se il profiling 
mostra che e` troppo lento, riscriverlo da zero.
IMHO.


 wrote in message
news:Ab_V8.6928$
7N3.1...@twister2.libero.it

** Puoi usare indifferentemente Outlook o Netscape.
Release 5.0 perche' la 4.5 ha problemi di compatibilita' con il 
Java Client in quanto il protocollo di comunicazione tra Web Server ed
il
clienti non e' TCP/IP ma HTTP.
Puoi bypassare il problema con Eudora oppure con una ciabatta a 5 prese
industriali lasciata di fianco al tuo pc. Il carico elettrostatico
provocato
dalle vicinanza dei due oggetti non dovrebbe superare i limiti
consentiti
dall'ultimo accordo start sulle testate nucleari firmato tra Bush e
Cofferati
Se hai bisogno di info, c'e il 12 (telecom italia) o il 190 (vodafone)
oppure 88 24 24.
ldb
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG