Saya menduga bahwa informasi tentang Xbox 360 dan PS3 secara khusus akan berada di belakang tembok yang berlisensi-pengembang, seperti kebanyakan detail tingkat rendah. Namun, kita dapat membuat program x86 yang setara dan membongkarnya untuk mendapatkan ide umum.
Pertama, mari kita lihat berapa biaya pelebaran yang tidak ditandatangani:
unsigned char x = 1;
unsigned int y = 1;
unsigned int z;
z = x;
z = y;
Bagian yang relevan dibongkar menjadi (menggunakan 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)
Jadi pada dasarnya sama - dalam satu kasus kita memindahkan byte, yang lain kita memindahkan kata. Berikutnya:
signed char x = 1;
signed int y = 1;
signed int z;
z = x;
z = y;
Berubah menjadi:
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)
Jadi biaya perpanjangan tanda adalah berapa pun biaya movsbl
daripada movzbl
tingkat sub-instruksi. Itu pada dasarnya mustahil untuk diukur pada prosesor modern karena cara kerja prosesor modern. Segala sesuatu yang lain, mulai dari kecepatan memori untuk caching ke apa yang ada di dalam pipa sebelumnya, akan mendominasi runtime.
Dalam ~ 10 menit saya menulis tes ini, saya bisa dengan mudah menemukan bug kinerja nyata, dan segera setelah saya mengaktifkan tingkat optimasi kompiler, kode menjadi tidak dapat dikenali untuk tugas-tugas mudah seperti itu.
Ini bukan Stack Overflow, jadi saya harap tidak ada orang di sini yang akan mengklaim optimasi mikro tidak masalah. Game sering kali bekerja pada data yang sangat besar dan sangat numerik, sehingga perhatian yang cermat terhadap percabangan, gips, penjadwalan, perataan struktur, dan sebagainya dapat memberikan peningkatan yang sangat kritis. Siapa pun yang telah menghabiskan banyak waktu untuk mengoptimalkan kode PPC mungkin memiliki setidaknya satu cerita horor tentang load-hit-store. Tetapi dalam kasus ini, itu benar-benar tidak masalah. Ukuran penyimpanan tipe integer Anda tidak memengaruhi kinerja, asalkan itu sejajar dan pas dalam register.