Eu suspeito que as informações sobre o Xbox 360 e PS3 especificamente estejam atrás de muros somente para desenvolvedores licenciados, como a maioria dos detalhes de baixo nível. No entanto, podemos construir um programa x86 equivalente e desmontá-lo para ter uma idéia geral.
Primeiro, vamos ver quais custos de alargamento não assinados:
unsigned char x = 1;
unsigned int y = 1;
unsigned int z;
z = x;
z = y;
A parte relevante é desmontada (usando o 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)
Então basicamente o mesmo - em um caso, movemos um byte, no outro, movemos uma palavra. Próximo:
signed char x = 1;
signed int y = 1;
signed int z;
z = x;
z = y;
Torna-se em:
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)
Portanto, o custo da extensão do sinal é qualquer que seja o custo, movsbl
e não movzbl
o nível de sub-instrução. Isso é basicamente impossível de quantificar nos processadores modernos devido à maneira como os processadores modernos funcionam. Todo o resto, variando da velocidade da memória ao cache, até o que estava no pipeline de antemão, vai dominar o tempo de execução.
Nos ~ 10 minutos que levei para escrever esses testes, eu poderia facilmente encontrar um bug de desempenho real e, assim que ligo qualquer nível de otimização do compilador, o código fica irreconhecível para tarefas simples.
Isso não é Stack Overflow, por isso espero que ninguém aqui afirme que a microoptimização não importa. Os jogos geralmente trabalham com dados muito grandes e muito numéricos; portanto, uma atenção cuidadosa às ramificações, projeções, agendamento, alinhamento de estrutura etc. pode fornecer melhorias muito críticas. Qualquer pessoa que tenha passado muito tempo otimizando o código PPC provavelmente tem pelo menos uma história de horror sobre lojas de carregamento de itens atingidos. Mas neste caso, isso realmente não importa. O tamanho do armazenamento do seu tipo inteiro não afeta o desempenho, desde que esteja alinhado e caiba em um registro.