SORU
23 Temmuz 2010, Cuma


#pragma pack etkisi

Eğer birisi #pragma pack basit deyimi ne yapar, ve daha da önemlisi, bunu kullanmak isterim neden diye merak ediyordum.

Bazı bilgiler sundu MSDN page, ama ben deneyimi olan kişilerden daha fazla duymak için umut vardı kontrol ettim. Burada artık bulmak için görünmüyor olsa da kodu daha önce görmedim.

CEVAP
23 Temmuz 2010, Cuma


#pragma pack özel uyum yapı üyeleri pack derleyici bildirir. Bir yapı bildirdiğinizde çoğu derleyici, Ekle, üyeleri arasında dolgu bellek (genellikle bu tür büyüklüğü çok uygun adresleri hizalanmış olduklarından emin olmak için. Bu biraz mimarileri düzgün şekilde hizalanmış değişkenleri erişim ile ilgili performans cezası (ya da düpedüz hata) önler. Örneğin, 4 baytlık tamsayı ve aşağıdaki yapı verilir

struct Test
{
   char AA;
   int BB;
   char CC;
};

Derleyici böyle bellek: yapı koymak için seçebilirsiniz

|   1   |   2   |   3   |   4   |  

| AA(1) | pad.................. |
| BB(1) | BB(2) | BB(3) | BB(4) | 
| CC(1) | pad.................. |

ve sizeof(Test) 4 &kez sadece veri 6 bayt içeriyor olsa bile; 3 = 12 olacaktır. En yaygın kullanım şekli için #pragma (bildiğim kadarıyla) çalışma ile donanım aygıtları nerede ihtiyacınız emin olmak için derleyici Ekle not doldurma verileri ve her bir üye şöyle bir önceki. #pragma pack(1) yapı yukarıdaki gibi konmuş olurdu bu

|   1   |

| AA(1) |
| BB(1) |
| BB(2) |
| BB(3) |
| BB(4) |
| CC(1) |

Ve sizeof(Test) 1 × 6 = 6 olur.

#pragma pack(2) yapı yukarıdaki gibi konmuş olurdu bu

|   1   |   2   | 

| AA(1) | pad.. |
| BB(1) | BB(2) |
| BB(3) | BB(4) |
| CC(1) | pad.. |

Ve sizeof(Test) 2 × 4 = 8 olacaktır.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Blu animations and other videos

    Blu animatio

    15 HAZİRAN 2007
  • Music EuroDance 2

    Music EuroDa

    12 Mayıs 2011
  • theKGB65

    theKGB65

    24 Aralık 2007