Little Endian ve Big Endian Nedir ?

Little Endian ve Big Endian kavramlarını öğrenelim.

Alfabelerde olduğu gibi sağdan sola ya da soldan sağa doğru yazım şeklini işlemciler de byte’ları saklarken önemli byte’ın solda veya sağda olmasına göre sınıflandırılır. Buna endianness da denir.

İşlemcilerin byte’ları saklarken kullandığı sıralamadır. Büyük Sonlu (Big-Endian) ve Küçük Sonlu (Little-Endian) olmak üzere ikiye ayrılır.

 

Little-Endian (Küçük Sonlu)

i386 ve devamı olan işlemciler Little-Endian kullanır.

Elimizde 0x34E2561A 4 Byte’lık Integer verimiz olsun. Sağdan itibaren başlanarak 0x1A 0x56 0xE2 0x34 olarak saklanır.

 

Big-Endian (Büyük Sonlu)

Sun Sparc, Motorola 68K, PowerPC ve Java Sanal İşlemcisi (Java VM) Big-Endian kullanır.

0x7654139A verisi soldan itibaren başlanarak 0x76 0x54 0x13 0x9A olarak saklanır.

Arap rakamlarında olduğu gibi (İngilizce veya Türkçede kullandığımız rakamlar) önemli byte’ın solda olduğu sıralamaya Big-endian denir. Önemli byte’ın en sağda olduğu sıralama ise Little-endian olarak adlandırılır.

Microsoft ise bu olayı şöyle açıklamış: Bilgisayarlar tasarlarken, bellek depolama işleme için iki farklı mimariyi vardır. Bunlar, Big Endian ve Little Endian olarak adlandırılır ve bayt bellekte saklandığı sırada bakın. Windows NT Little Endian mimarisi tasarlanmıştır ve programlarının çoğu ile bazı bağımlılık üzerinde Little Endian yazıldığı Big Endian ile uyumlu olacak şekilde tasarlanmamıştır.

Örnek 1
struct
{
WORD y;
WORD x;
} POS;

lparam = (DWORD) POS;

Temel olarak, Little Endian kullanıldığını kodda varsayımı vardır. Geçiş bayt ‘C’ yapısında varsayılır. Intel mimarisinde daha hızlıdır, ancak Big Endian ile çalışmaz.

Bütün işlemciler kendi sıralamasını seçmiştir. i386 ve klonu olan işlemciler Little endian’dır. Sun Sparc, Motorola 68K ve PowerPC big endian kullanır. Java Sanal İşlemcisi (Java VM) de big endian kullanır.

Farklı iki işlemcisi olan makineler birbirileri ile haberleşecekleri zaman (IPC), bu veri dönüşümünü yapmazlar ise haberleşemezler.

Ağ protokolleri de kendi sıralamasını seçmelidir. Aksi takdirde iki farklı mimarideki bilgisayar IPC yaparak birbirileri ile haberleşecekleri zaman anlaşamayacaklardır. TCP/IP big endian sıralamasını kullanır. Bunun anlamı şu: Herhangi bir paket (IP adresi, paket uzunluğu, kontrol değeri gibi) gönderileceği zaman en önemli byte’ı önce gönderilir ve alınır.

Ortak dosya formatları ve endian sırası

  • Adobe Photoshop — Big Endian
  • BMP (Windows and OS/2 Bitmaps) — Little Endian
  • DXF (AutoCad) — Variable
  • GIF — Little Endian
  • IMG (GEM Raster) — Big Endian
  • JPEG — Big Endian
  • FLI (Autodesk Animator) — Little Endian
  • MacPaint — Big Endian
  • PCX (PC Paintbrush) — Little Endian
  • PostScript — Not Applicable (text!)
  • POV (Persistence of Vision ray-tracer) — Not Applicable (text!)
  • QTM (Quicktime Movies) — Little Endian (on a Mac!)
  • Microsoft RIFF (.WAV & .AVI) — Both
  • Microsoft RTF (Rich Text Format) — Little Endian
  • SGI (Silicon Graphics) — Big Endian
  • Sun Raster — Big Endian
  • TGA (Targa) — Little Endian
  • TIFF — Both, Endian identifier encoded into file
  • WPG (WordPerfect Graphics Metafile) — Big Endian (on a PC!)
  • XWD (X Window Dump) — Both, Endian identifier encoded into file