Sospetto che le informazioni su Xbox 360 e PS3 in particolare saranno nascoste dietro muri solo per sviluppatori autorizzati, come la maggior parte dei dettagli di basso livello. Tuttavia, possiamo costruire un programma x86 equivalente e smontarlo per avere un'idea generale.
Innanzitutto, vediamo quali costi di ampliamento senza segno:
unsigned char x = 1;
unsigned int y = 1;
unsigned int z;
z = x;
z = y;
La parte pertinente si disassembla (utilizzando GCC 4.4.5):
z = x;
27: 0f b6 45 ff movzbl -0x1(%ebp),%eax
2b: 89 45 f4 mov %eax,-0xc(%ebp)
z = y;
2e: 8b 45 f8 mov -0x8(%ebp),%eax
31: 89 45 f4 mov %eax,-0xc(%ebp)
Quindi praticamente lo stesso: in un caso spostiamo un byte, nell'altro spostiamo una parola. Il prossimo:
signed char x = 1;
signed int y = 1;
signed int z;
z = x;
z = y;
Diventa:
z = x;
11: 0f be 45 ff movsbl -0x1(%ebp),%eax
15: 89 45 f4 mov %eax,-0xc(%ebp)
z = y;
18: 8b 45 f8 mov -0x8(%ebp),%eax
1b: 89 45 f4 mov %eax,-0xc(%ebp)
Quindi il costo dell'estensione del segno è qualunque sia il costo movsbl
piuttosto che lo movzbl
è - livello di sub-istruzione. Questo è sostanzialmente impossibile da quantificare sui processori moderni a causa del modo in cui funzionano i processori moderni. Tutto il resto, che va dalla velocità della memoria alla memorizzazione nella cache a ciò che era in precedenza nella pipeline, dominerà il runtime.
In ~ 10 minuti mi sono voluti scrivere questi test, avrei potuto facilmente trovare un vero bug di prestazione, e non appena accendo qualsiasi livello di ottimizzazione del compilatore, il codice diventa irriconoscibile per compiti così semplici.
Questo non è Stack Overflow, quindi spero che nessuno qui affermi che la microottimizzazione non ha importanza. I giochi spesso funzionano su dati molto grandi e molto numerici, quindi un'attenta attenzione alla ramificazione, ai cast, alla pianificazione, all'allineamento della struttura e così via può apportare miglioramenti molto critici. Chiunque abbia trascorso molto tempo a ottimizzare il codice PPC probabilmente ha almeno una storia horror sui negozi di successo. Ma in questo caso, non importa davvero. La dimensione di archiviazione del tipo intero non influisce sulle prestazioni, purché sia allineata e si adatti a un registro.