SORU
23 EYLÜL 2008, Salı


Neden't bir yapı her üyenin boyutu toplamına eşit boyutu değil mi?

Neden 'boyutu' operatör dönüş boyut yapısı üye tam boyutları daha büyük bir yapı için?

CEVAP
23 EYLÜL 2008, Salı


Bu doldurma eklendi çünkü uyum kısıtlamaları karşılamak için. Data structure alignment program hem performans hem de doğruluğu etkileri:

  • Yanlış hizalanmış erişim sabit bir hata (genellikle SIGBUS) olabilir.
  • Yanlış hizalanmış erişim yumuşak bir hata olabilir.
    • Ya performans düşüşü mütevazı donanım olarak düzeltilmiş.
    • Veya yazılım emülasyonu tarafından düzeltilmiş, performans düşüşü ağır için.
    • Buna ek olarak, kararlılık ve tutarlılık-Teminatlar diğer, ince hataları önde gelen bozuk olabilir.

İşte size bir örnek x 86 işlemci (64 bit modları 32) kullanılan tipik ayarları kullanarak:

struct X
{
    short s; /* 2 bytes */
             /* 2 padding bytes */
    int   i; /* 4 bytes */
    char  c; /* 1 byte */
             /* 3 padding bytes */
};

struct Y
{
    int   i; /* 4 bytes */
    char  c; /* 1 byte */
             /* 1 padding byte */
    short s; /* 2 bytes */
};

struct Z
{
    int   i; /* 4 bytes */
    short s; /* 2 bytes */
    char  c; /* 1 byte */
             /* 1 padding byte */
};

const int sizeX = sizeof(X); /* = 12 */
const int sizeY = sizeof(Y); /* = 8 */
const int sizeZ = sizeof(Z); /* = 8 */

Hizalama (temel türleri için yeterlidir boyutuna göre sıralama) yukarıdaki örnekte Z yapı gibi () tarafından üyeleri sıralayarak yapıların boyutunu en aza indirmek mümkün.

ÖNEMLİ NOT: yapı hizalama olduğunu Hem de C ve C standartları devlet uygulama tanımlı. Bu nedenle her derleyici veri farklı şekilde hizalamak için, farklı ve uyumsuz veri düzenleri ile sonuçlanan seçebilirsiniz. Farklı Derleyiciler tarafından kullanılan kütüphaneler ile uğraşırken, bu nedenle, önemli Derleyiciler veri hizalamak nasıl anlamak önemlidir. Bazı Derleyiciler komut satırı ayarları ve/veya #pragma özel açıklamaları yapısını değiştirmek için hizalama ayarları var.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Google Developers

    Google Devel

    23 AĞUSTOS 2007
  • Jeremy Gallman

    Jeremy Gallm

    11 NİSAN 2012
  • kimaliz

    kimaliz

    18 Temmuz 2006