Sto cercando di capire quanti cicli di clock o le istruzioni totali necessarie per accedere a un puntatore in C. Non penso di sapere come, ad esempio, p-> x = d-> a + f-> bQuante istruzioni per accedere al puntatore in C?
assumerei due carichi per puntatore, solo supponendo che ci sarebbe un carico per il puntatore e un carico per il valore. Quindi, in queste operazioni, la risoluzione del puntatore sarebbe un fattore molto più grande dell'effettiva aggiunta, per quanto riguarda il tentativo di accelerare questo codice, giusto?
Questo può dipendere dal compilatore e dall'architettura implementati, ma sono sulla strada giusta?
Ho visto un certo codice in cui ogni valore utilizzato nel dire, 3 aggiunte, proveniva da una
f2->sum = p1->p2->p3->x + p1->p2->p3->a + p1->p2->p3->m
tipo di struttura, e sto cercando di definire quanto male questo è
dipende dalla modalità di indirizzo imho - near jump/long jump, address computation ... –
ricorda che il compilatore * dovrebbe * spostare molto di questo nello stack dopo averlo scaricato una volta. Se non lo è, e non devi preoccuparti del multithreading, puoi memorizzare in cache le inseguimenti del puntatore. –
@Robert: se il multithreading influenzerà il dereferenziamento del puntatore nell'esempio, il codice richiede una serializzazione esplicita: un compilatore ottimizzante sarà sempre in grado di memorizzare "p3" in un registro e utilizzarlo per tutti e 3 gli accessi dei membri (supponendo che non ci sia nessun membro 'volatile' in uso). –