Sedikit dan endianness besar dalam game

16

Apakah kita harus khawatir tentang pesanan byte dalam proses pemrograman game? Apakah konsol game menggunakan perintah byte yang berbeda?

saadtaame
sumber
1
Apakah Anda khawatir tentang proyek tertentu yang sedang Anda kerjakan saat ini atau hanya secara umum? Sebagian besar, jika Anda menulis game untuk konsol, Anda kemungkinan akan menggunakan beberapa alat yang terdokumentasi dengan baik seperti XNA dan input dan output akan tercakup dalam dokumennya.
wolfdawn
4
Jika Anda khawatir tentang ini, saya benar-benar merekomendasikan Rob Pike's Kesalahan urutan byte - mencoba khawatir tentang urutan byte sering membuat Anda mendapat lebih banyak masalah daripada hanya mengabaikannya dan menulis kode yang benar-benar independen-endian.
1
Ini bacaan yang bagus, tetapi Rob menunjukkan bahwa Anda bisa mendapatkan bacaan yang disederhanakan dengan mengorbankan kebutuhan penulisan yang lebih kompleks. Jika Anda bukan orang yang menulis, bagus!
Kylotan

Jawaban:

14

Jika Anda menulis kode jaringan, ini sering kali adalah sesuatu yang harus Anda tangani, ya.

Juga mungkin bahwa pemesanan byte dalam format file bukan apa yang digunakan platform Anda, jadi kadang-kadang itu penting juga di sana.

Kylotan
sumber
8

Apakah Anda harus mengkhawatirkannya? Mungkin tidak. Sebagian besar pemrograman game akan berada pada tingkat tertentu sehingga endianness disarikan. Bahkan di jaringan, Anda hampir pasti akan menggunakan perpustakaan untuk protokol jaringan. Bagus bahwa Anda menyadarinya, tetapi saya ragu Anda akan mengalami masalah dengannya.

MichaelHouse
sumber
5

Sebagian besar waktu, tidak.

Endianess biasanya diabstraksi dalam modul tingkat tinggi dari mesin permainan, dan Anda tidak perlu khawatir tentang hal itu setiap hari. Jika tidak diabstraksikan, maka mesin memiliki masalah serius dan harus diperbaiki, karena ini bukan jenis detail yang harus Anda khawatirkan saat membuat game.

Namun jika Anda bekerja pada beberapa bagian tingkat rendah dari mesin multi-platform C / C ++, Anda mungkin harus menghadapinya. Ketiga konsol generasi saat ini menggunakan arsitektur PowerPC, yang merupakan big-endian, sedangkan arsitektur x86 yang digunakan pada PC adalah little-endian. Jadi jika Anda bekerja pada beberapa kode yang membaca byte mentah dari suatu tempat untuk menempatkannya dalam struktur data (serialisasi biner, jaringan ...), ya Anda harus menghadapinya.

Sebagai contoh, di C / C ++, itu biasa untuk melihat byte ini bertukar dalam aksi (tidak diuji, menyambut koreksi):

// Assume bytes comes ordered as big-endian
u16 u16FromBytes(void* data)
{
#if BIG_ENDIAN
    return (u16(data[0]) << 8) + u16(data[1]);
#else // LITTLE_ENDIAN
    return (u16(data[1]) << 8) + u16(data[0]);
#endif
}

Sekali lagi, ini tidak apa-apa dalam kode tingkat rendah, tetapi ini seharusnya tidak menjadi sesuatu yang digunakan di mana-mana.

Laurent Couvidou
sumber
3

Itu tergantung pada platform yang Anda targetkan. Sebagai contoh, saya percaya bahwa PS3 adalah big-endien jadi jika itu salah satu target Anda maka itu adalah sesuatu yang perlu Anda waspadai, ya.

Di ruang komputer di rumah "Big 3" (Windows, Linux, Mac) semuanya eksklusif, atau semuanya kecuali arsitektur Intel x86 / x64 akhir-akhir ini, sehingga kekhawatiran tentang daya tahan tidak lagi relevan.

Maximus Minimus
sumber
Tidak lagi relevan? Dalam pengalaman saya (2-3 game di beberapa perusahaan dan 7 tahun, kedua MMO ... jadi anekdotal daripada valid secara statistik) masing-masing pasar PS dan Xbox sekitar dua kali lipat ukuran pasar windows, Mac adalah sebagian kecil Windows, dan Linux terasa lebih kecil dari itu. Kecuali gim Anda tidak bisa bekerja di konsol, Anda menyisakan 80% dari keuntungan Anda dengan tetap berpegang pada PC. Kode cross-endian juga berarti server Anda dapat berada di mesin yang sama sekali berbeda dari klien Anda (mis: setiap game konsol server-klien sebelumnya).
Mark Storer
@MarkStorer - Saya pikir Anda perlu membaca kembali apa yang sebenarnya saya tulis.
Maximus Minimus