Xbox 360 ve PS3 ile ilgili bilgilerin, özellikle düşük seviyeli ayrıntıların olduğu gibi yalnızca lisanslı geliştiricilerin duvarlarının arkasında olacağından şüpheleniyorum. Bununla birlikte, eşdeğer bir x86 programı oluşturabilir ve genel bir fikir edinmek için onu sökebiliriz.
İlk olarak, imzasız genişletme maliyetlerinin ne olduğunu görelim:
unsigned char x = 1;
unsigned int y = 1;
unsigned int z;
z = x;
z = y;
İlgili kısım, (GCC 4.4.5 kullanarak) içinde parçalanır:
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)
Yani temelde aynı - bir durumda bir baytı, diğerinde bir kelimeyi taşırız. Sonraki:
signed char x = 1;
signed int y = 1;
signed int z;
z = x;
z = y;
Dönüşür:
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)
Bu yüzden, işaret uzatma maliyeti, maliyetten movsbl
ziyade maliyetidir movzbl
- alt komut seviyesi. Modern işlemcilerin çalışma şekli nedeniyle modern işlemcileri ölçmek imkansız. Hafıza hızından önbelleğe almaya kadar önceden boru hattında bulunanlara kadar her şey çalışma zamanına hükmedecek.
~ 10 dakikada bu testleri yazmam çok kolay oldu, kolayca gerçek bir performans hatası buldum ve herhangi bir derleyici optimizasyon seviyesini açtığımda, kod bu kadar basit işler için tanınmayacak hale geldi.
Bu Yığın Taşması değildir, bu yüzden burada kimse mikrooptimizasyonun önemli olmadığını iddia edecektir. Oyunlar genellikle çok büyük ve çok sayısal olan veriler üzerinde çalışır, bu nedenle dallara, atmalara, zamanlamaya, yapıya uyum göstermeye vb. Dikkat ederek çok kritik geliştirmeler yapabilir. PPC kodunu optimize etmek için çok zaman harcayan herkesin büyük olasılıkla load-hit-mağazaları hakkında en az bir korku hikayesi vardır. Ancak bu durumda, gerçekten önemli değil. Tamsayı türünüzün depolama boyutu, hizalanıp kayıt defterine sığdığı sürece performansı etkilemez.