Hei community,Tempo per eliminare i puntatori
Ho una piccola domanda relativa alla cancellazione dei puntatori.
Sto lavorando con matrici da puntatore a puntatore di Dimensione 1024x1024. Dal momento che li sto creando dinamicamente, elimino lo spazio allocato per loro alla fine del programma. Ma fare questo nel solito giro costa un sacco di tempo - ho misurato circa 2 secondi usando il clock rate del processore. E 2 secondi è ENORME quando il programma gira solo 15 secondi - più: la funzione che usa questi puntatori assegnati viene chiamata più di una volta sola ....
Ecco il pezzo misurato time-critical del Codice tra cui la misura:
time=clock();
for(i=0;i<xSize;i++){ //xSize is dynamic, but 1024 for the measurement
delete [] inDaten[i];
delete [] inDaten2[i];
delete [] copy[i];
}
delete inDaten; delete inDaten2; delete copy;
time=clock()-time;
time/=CLOCKS_PER_SEC;
sta cancellando le indicazioni SEMPRE così a lungo? O sto semplicemente facendo le cose nel modo sbagliato?
Spero che qualcuno qui mi possa aiutare con quello. Dal momento che sto ottimizzando un programma abbastanza complesso per funzionare più velocemente, non posso usare quei 2 pezzi di codice. È solo un modo TROPPO lento rispetto a tutte le altre parti. Ma devo ancora essere in grado di implementare questo codice in modo dinamico. Gli SmartPointer potrebbero essere utili, ma se ho capito bene, hanno anche bisogno di tempo per cancellarsi - solo in un momento diverso ...
Grazie per le vostre risposte!
Baradrist
EDIT: ho appena scoperto, che misura questi eliminazione-calcoli è piuttosto lento perché non ho compilo in release-mode. Dal momento che il debugger entra in gioco, ho misurato questi numeri (alla fine irreali) che mi hanno fatto venire il mal di testa. Il programma finale viene ottimizzato automaticamente in modo tale da non perdere più tempo nella cancellazione.
In ogni caso: grazie per tutte le risposte utili! Mi hanno dato molte conoscenze extra e cose a cui pensare !!!!
Qual è il tipo di oggetti in 'inDaten',' inDaten2' e 'copy'? Sono solo intarsi o qualcosa del genere, o sono oggetti reali? –
Hai bisogno di allocare dinamicamente tutto? Hai bisogno di così tante * allocazioni separate *? È possibile riscrivere il programma per archiviare i dati in allocazioni meno numerose? – jalf
Sul mio netbook, l'eliminazione di double [] non raggiunge il segno di spunta successivo, quindi o stai correndo con un debugger collegato, oppure qualcosa di costoso sta accadendo nei distruttori degli elementi dell'array. –