|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6328
|
Vector ed iteratori in C++
Sto facendo un risolutore di labirinti in cui uso molti cicli. Per cercare di velocizzare il tutto ho usato i vector e gli iteratori del tipo:
vector<int> nodiaperti; vector<int>::iterator iteratore_nodiaperti; I cicli li faccio del tipo: while(iteratore_nodiaperti!=nodiaperti.end()) { corpo del while iteratore_nodiaperti++; } Il problema è che non ho notato alcun miglioramento in termini di prestazioni ,anzi in alcuni casi il tempo di risoluzione del labirinto aumenta molto rispetto a quando usavo vettori statici e ci accedevo con un semplice indice intero. Ora mi chiedo, ma i vector, sono più lenti da scorrere rispetto a vettori di int semplici? Hanno molti metodi associati questo è vero, pero' forse perdono in velocità, boh. Premetto che il codice non dà alcun tipo di errore. Ultima modifica di Unrue : 21-04-2006 alle 12:57. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Hai compilato in Debug o Release?
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6328
|
Quote:
Ultima modifica di Unrue : 21-04-2006 alle 22:34. |
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Quote:
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Apr 2006
Messaggi: 89
|
Risposta
Sebbene le STL siano ottimizzate (per ottimizzate intendo buon compromesso tra velocità di elaborazione e funzioni messe a disposizione), possono capitare casi in cui è vitale una prestazione (in termini di velocità) elevata. In tal caso, se non ti servono tutte le funzioni aggiuntive messe a disposizione dalle STL, ti consiglio di utilizzare gli array statici "classici" sicuramente + veloci.
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
Nel 99.9% dei casi, per te, std::vector e' piu' che efficiente e non ti capitera' mai di aver bisogno di usare gli array nativi.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6328
|
Quote:
|
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
|
#9 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6328
|
Quote:
Dunque, se non ho capito male, se in un programma so che una funzione verrà chiamata molte volte, conviene dichiararla inline vero? Questo pero' se il corpo della funzione non è troppo grosso. Quali sono le controindicazioni? Ultima modifica di Unrue : 23-04-2006 alle 22:51. |
|
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Apr 2006
Messaggi: 89
|
come sempre ci sono dei compromessi: utilizzando inline certamente l'esecuzione di funzioni è molto + veloce....
ho detto esecuzione perchè non vengono effettuate chiamate (è come se tu copiassi ogni volta il codice della funzione nel punto in cui viene utilizzata). Tuttavia, specialmente se utilizzi numerose funzioni abbastanza corpose (e le utilizzi spesso), ciò può provocare un'occupazione di memoria notevole. Scegli in base alle tue specifiche esigenze. |
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Quote:
http://www.theprodukkt.com/kkrieger.html (per chi non ha mai visto un gioco che sta in 96kb!)
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6328
|
Quote:
|
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6328
|
Quote:
|
|
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Quote:
Ma devi essere fuso di testa.
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
Come regola generale non dichiarare mai nulla inline mentre scrivi il codice, soprattutto in progetti molto grossi, perche' per svariati motivi tende a rallentare di molto la compilazione e... tanto non cambia nulla a livello di velocita' nel 99.99% dei casi se hai un buon compilatore. La direttiva 'inline' e' solo un consiglio che dai al compilatore e come tutti i consigli il compilatore puo' ignorarli e spesso e volentieri lo fa (secondo alcune metriche sue). Se dichiari inline un metodo molto corposo, sicuramente il compilatore lo ignorera'. Inoltre i compilatori di ultima generazione sono in grado di mettere inline anche metodi che tu non hai dichiarato inline, quando ci sono le condizioni. In conclusione: non dichiarare nulla inline, e usa un ottimo compilatore. Avrai il meglio dai due mondi.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
|
#17 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
|
|
|
|
|
#18 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
per esempio su MFC (un popolare framework a oggetti per la programmazione Win32) molti metodi di alcune classi altro non fanno che chiamare la funzione API Win32 omonima passandogli un handle ricavato dal this; tutti quei metodi sono inline, ed è un'ottima scelta perché se non lo fossero avresti al momento della chiamata due stack frames letteralmente identici anziché uno. e nota bene che sono tutti metodi da una sola riga di codice, perché devono solo fare la chiamata |
|
|
|
|
|
|
#19 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Quote:
Comunque, sta in 96kb...quindi qualche problema di compatibilità gliela possiamo pure tollerare
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:23.



















