2013-02-21 6 views

risposta

0

No, non è una chiamata costosa. È una chiamata di sistema o simile, ma lontana da una costosa. Ovviamente, se è possibile memorizzare il valore in una variabile semplice, sarà più rapido di un fattore 10.

Ma come tutte le query relative alle prestazioni, è davvero il tuo benchmarking. Puoi facilmente impostare le cose per usare un singolo thread, chiamare la funzione per ottenere l'ID del thread e fare ciò che vuoi fare. Misura quanto tempo ci vuole per eseguire un test con questo. Quindi sostituire la chiamata per l'ID thread con un valore costante nello stesso intervallo e vedere come funziona.

7

Almeno in Windows, GetCurrentThreadId() è piuttosto economico e non comporta una chiamata di sistema. In pratica funziona fuori a:

int GetCurrentThreadId() { 
    _asm { 
     mov eax, fs:[18h] 
     mov eax, [eax+24h] 
    } 
} 

Ci potrebbe essere un po 'vantaggio per la memorizzazione nella cache il valore in una variabile, ma non molto. Il vantaggio principale sarebbe probabilmente se memorizzate la vostra variabile insieme ad altre variabili usate di frequente, che potrebbero migliorare la località (e quindi l'utilizzo della cache).

Quindi, a meno che non si stia lavorando su un ciclo così stretto che la possibilità di eliminare un recupero di memoria (o forse due) è significativa, è improbabile che si guadagni molto memorizzando il valore restituito.

+1

Ho visto Unix (es) fare lo stesso (ma con gs, non che importi). Quindi la tua risposta è corretta per più piattaforme. È molto economico – boiler96

Problemi correlati