Aracılığıyla paylaş


pack

Yapısı, birleşim ve sınıf üyesi ambalaj hizalamasını belirtir.

#pragma pack( [ show ] | [ push | pop ] [, identifier ] , n  )

Notlar

packveri bildirimi düzeyinde denetim sağlar. Bu derleyici seçeneği farklı /Zp, hangi yalnızca modül düzeyinde denetim sağlar. packilk bakışta etkin duruma gelir struct, union, veya class pragma görülen sonra bildirimi. packtanımları üzerinde hiçbir etkisi yoktur. Arayan pack hiçbir bağımsız değişken kümeleriyle n derleyici seçeneğinde ayarlı değere /Zp. Derleyici seçeneği ayarlanmazsa, varsayılan değer 8'dir.

Bir yapı hizalamasını değiştirmek, bellek, ancak ne kadar alan bir performans düşüklüğü görmek veya hatta donanım tarafından oluşturulan bir özel durum hizalanmamış erişim almak gibi kullanamazsınız. Bu özel durum davranışı kullanarak değiştirebilirsiniz SetErrorMode.

  • show(isteğe bağlı)
    Hizalama ambalaj için geçerli bayt değerini görüntüler. Değer, bir uyarı iletisi görüntülenir.

  • push(isteğe bağlı)
    Geçerli sevk hizalama iter değer Derleyici iç yığın ve Ambalaj hizalaması geçerli bir değere ayarlar n. n Belirtilmezse, geçerli hizalama değer ambalaj itilmiş.

  • pop(isteğe bağlı)
    İç derleyici Yığını üstten kaydını kaldırır. n İle belirtilmemiş pop, yığının üstünde ortaya çıkan kayıtla ilişkili sevk değeri ise yeni ambalaj hizalama değeri. n , Örneğin, belirtilen #pragma pack(pop, 16), n yeni duruma hizalama değer ambalaj. İle pop, identifier, örneğin, #pragma pack(pop, r1), sonra yığındaki tüm kayıtları olan kayıt kadar popped identifier bulunur. Kayıt popped ve üstündeki ortaya çıkan kayıtla ilişkili sevk yeni ambalaj yığın değerdir hizalama değeri. İle pop, bir identifier , bulunamadı, yığındaki herhangi bir kayıttaki sonra pop göz ardı edilir.

  • identifier(isteğe bağlı)
    Aşağıdakilerle kullanıldığında push, derleyici iç yığında kaydı için bir ad atar. Aşağıdakilerle kullanıldığında pop, kayıtları kadar iç yığından POP identifier kaldırılır; identifier bulunamadı iç yığın üzerinde hiçbir şey popped.

  • n (isteğe bağlı)
    Değer, sevk için kullanılacak bayt cinsinden belirtir. Derleyici seçeneği /Zp modül için varsayılan değer ayarlanmamış n 8'dir. Geçerli değerler 1, 2, 4, 8 ve 16. Üye hizalamasını ya sınırında katları olmalıdır n ya da birden çok üye boyutunun daha küçük.

#pragma pack(pop,identifier, n)tanımlı değil.

Hizalamayı değiştirme hakkında daha fazla bilgi için şu konulara bakın:

Örnek

Aşağıdaki örnek, nasıl kullanılacağını gösteren pack bir yapı hizalamasını değiştirmek için pragma.

// pragma_directives_pack.cpp
#include <stddef.h>
#include <stdio.h>

struct S {
   int i;   // size 4
   short j;   // size 2
   double k;   // size 8
};

#pragma pack(2)
struct T {
   int i;
   short j;
   double k;
};

int main() {
   printf("%d ", offsetof(S, i));
   printf("%d ", offsetof(S, j));
   printf("%d\n", offsetof(S, k));

   printf("%d ", offsetof(T, i));
   printf("%d ", offsetof(T, j));
   printf("%d\n", offsetof(T, k));
}

0 4 8
0 4 6

Aşağıdaki örnek, nasıl kullanılacağını gösteren push, pop, ve show sözdizimi.

// pragma_directives_pack_2.cpp
// compile with: /W1 /c
#pragma pack()   // n defaults to 8; equivalent to /Zp8
#pragma pack(show)   // C4810
#pragma pack(4)   // n = 4
#pragma pack(show)   // C4810
#pragma pack(push, r1, 16)   // n = 16, pushed to stack
#pragma pack(show)   // C4810
#pragma pack(pop, r1, 2)   // n = 2 , stack popped
#pragma pack(show)   // C4810

Ayrıca bkz.

Başvuru

Pragma yönergeleri ve anahtar sözcük __Pragma