Stavo solo esaminando alcuni codice del kernel , ho notato che rb->__rb_parent_color = (unsigned long)p | color;
è un po 'cablato. Si accede al primo campo di una struct gettando il puntatore e non usando il nome del campo.
Qui è la definizione di quella struttura, come puoi vedere il colore è il primo attributo, quindi il semplice casting (unsigned long)p
ci darà lo stesso rb->__rb_parent_color
. Ma perché gli sviluppatori hanno scelto di farlo in questo modo e di non utilizzare ->
?
L'unica ragione per cui posso pensare sono le ottimizzazioni del compilatore che non vengono eseguite quando si usa rb->__rb_parent_color
, ma è difficile crederlo perché sembra che il compilatore, in entrambi i casi, calcoli lo stesso offset senza problemi.