Я подозреваю, что информация о Xbox 360 и PS3 определенно будет находиться за стенами только для лицензированных разработчиков, как и большинство низкоуровневых деталей. Однако мы можем создать эквивалентную программу x86 и разобрать ее, чтобы получить общее представление.
Для начала посмотрим, что стоит беззнаковое расширение:
unsigned char x = 1;
unsigned int y = 1;
unsigned int z;
z = x;
z = y;
Соответствующая часть разбирается на (с помощью 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)
Таким образом, в основном то же самое - в одном случае мы перемещаем байт, в другом мы перемещаем слово. Следующий:
signed char x = 1;
signed int y = 1;
signed int z;
z = x;
z = y;
Превращается в:
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)
Таким образом, стоимость расширения знака является любой ценой, movsbl
а не movzbl
является уровнем подинструкций. В принципе невозможно дать количественную оценку современным процессорам из-за того, как работают современные процессоры. Все остальное, от скорости памяти до кэширования до того, что было в конвейере заранее, будет доминировать во время выполнения.
За ~ 10 минут, которые потребовались мне для написания этих тестов, я мог легко найти реальную ошибку производительности, и как только я включил любой уровень оптимизации компилятора, код стал неузнаваемым для таких простых задач.
Это не переполнение стека, поэтому я надеюсь, что никто здесь не будет утверждать, что микрооптимизация не имеет значения. Игры часто работают с очень большими и очень числовыми данными, поэтому тщательное внимание к ветвлению, приведению, планированию, выравниванию структуры и т. Д. Может дать очень важные улучшения. Любой, кто потратил много времени на оптимизацию кода PPC, вероятно, имеет по крайней мере одну ужасную историю о загрузочных хит-магазинах. Но в этом случае это действительно не имеет значения. Размер хранилища целочисленного типа не влияет на производительность, если он выровнен и помещается в регистр.