J'ai quelques questions sur de l'optimisation de code.
Je travail sur un �mulateur et l code suivant � pour but de lire un word stock� en big endian (sur une architecture little endian)
B = Base
A = Adresse
D = La donn�e

1�re solution :

Code : S�lectionner tout - Visualiser dans une fen�tre � part
D = (B[A+0] << 8) | (B[A+1])
=> Je compte 2 acc�s m�moire (1 fois pour lire B[A+0] et une autre pour lire B[A+1))

2 �me solution :

Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
D = *((u16*) (B + A)) /* On lit le word à l'adresse B + A */
D = ((D & 0xFF) << 8) | ((D & 0xFF00) >> 8) /* On swap les bytes */
=> Je compte 1 acc�s m�moire mais plus d'op�ration (je suppose que D est travaill�e dans un registre ...)

3 �me solution :

Code : S�lectionner tout - Visualiser dans une fen�tre � part
D = ((*((u16*) (B + A)) & 0xFF) << 8) | ((*((u16*) (B + A)) & 0xFF00) >> 8)
=> �quivalent � la deuxi�me mais �crit en une seule ligne.
Est ce que le compilateur va d�tecter que *((u16*) (B + A)) est pr�sent deux fois et ne va faire qu'un seul acc�s m�moire ?

Merci pour l'aide que vous pourrez m'apporter.