Good Day,prestazioni di spezzarsi un loop in due cicli
Si supponga di avere un semplice ciclo for come qui di seguito ...
for(int i=0;i<10;i++)
{
//statement 1
//statement 2
}
Si supponga che la dichiarazione dichiarazione 1 e 2 erano O (1). Oltre al piccolo overhead di "avviare" un altro ciclo, si potrebbe abbattere quello per il loop in due cicli (non annidati, ma sequenziali) altrettanto veloci? Per esempio ...
for(int i=0;i<10;i++)
{
//statement 1
}
for(int i=0;i<10;i++)
{
//statement 2
}
Perché faccio una domanda così sciocca è che ho un sistema di rilevamento delle collisioni (CDS) che deve scorrere tutti gli oggetti. Voglio "compartimenti stagni" la funzionalità del mio sistema CDS così posso semplicemente chiamare
cds.update(objectlist);
invece di dover rompere il mio sistema cd up. (Non preoccuparti troppo della mia implementazione del CDS ... Penso di sapere cosa sto facendo, semplicemente non so come spiegarlo, quello che ho davvero bisogno di sapere è se prendo un enorme successo in termini di prestazioni per il looping attraverso tutti miei oggetti nuovamente.
Come osservato stefaanv, il costo del ciclo attraverso tutti gli oggetti una seconda volta è indeterminato con le informazioni che hai dato. – patrickn
Vorrei anche notare che le due strutture di controllo che hai postato risolvono problemi diversi, e quindi non sono facilmente confrontabili nel contesto delle prestazioni. – patrickn
Senza conoscere più dettagli e senza misurazioni effettive, è impossibile dire quale versione è più veloce. Il caching, sia i dati che le istruzioni, così come la previsione delle branche (e le tabelle) e l'esecuzione speculativa aggiungono molta complessità all'ottimizzazione di oggi. Buon punto per un'ottica prematura. Misura prima nel mondo reale, quindi ottimizza. –