Estoy tratando de averiguar cuántos ciclos de reloj o instrucciones totales se necesitan para acceder a un puntero en C. No creo que sepa cómo averiguar, por ejemplo, p-> x = d-> a + f-> b¿Cuántas instrucciones para acceder al puntero en C?
supondría dos cargas por puntero, supongo que habría una carga para el puntero y una carga para el valor. Entonces, en estas operaciones, la resolución del puntero sería un factor mucho más grande que la suma real, en lo que respecta a tratar de acelerar este código, ¿verdad?
Esto puede depender del compilador y la arquitectura implementada, pero ¿estoy en el camino correcto?
he visto algo de código donde cada valor utilizado en, por ejemplo, 3 adiciones, provenía de un tipo
f2->sum = p1->p2->p3->x + p1->p2->p3->a + p1->p2->p3->m
de la estructura, y estoy tratando de definir lo malo que es
depende del modo de dirección imho - salto cercano/salto de longitud, cálculo de direcciones ... –
recuerde que el compilador * debe * mover una gran cantidad de esto a la pila después de ir a buscarlo una vez. Si no es así, y no necesita preocuparse por el multihilo, puede almacenar en caché el puntero. –
@Robert: si el multihilo va a afectar la desreferenciación del puntero en el ejemplo, entonces el código necesita serialización explícita: un compilador de optimización siempre podrá almacenar 'p3' en un registro y usarlo para los 3 accesos de miembros (suponiendo que haya no se usan miembros 'volátiles'). –