2010-10-25 14 views
8

Co właściwie robi poniższe stwierdzenie i jakie są jego skutki?C++ #pragma pack

#pragma pack(push,8) 
+0

http://msdn.microsoft.com/en-us/library/2e70t5y1(VS.80).aspx –

Odpowiedz

13

To popycha aktualny pack ustawienie na stos (tak, że można ją później przywrócić poprzez pop), a następnie ustawia dla struct wyrównanie elementów do 8 bajtów. Wszystko, co nie jest naturalnie wyrównane do granicy 8 bajtów, będzie zawierało wstawione bajty, aby zachować wymagane wyrównanie.

+5

Tylko dodatek, aby zobaczyć efekty: Zdefiniuj strukturę z elementami o różnych rozmiarach (np. char', 'short',' long', 'double'). Następnie określ rozmiar struktury za pomocą 'sizeof'. Umieść parę '#pragma pack (push, n)' i '#pragma pack (pop)' wokół struktury z różnymi wartościami dla 'n' (np. 1, 2, 4, 8). Zobacz, jak zmieniają się wyniki 'sizeof'. Opcjonalnie sprawdź zmianę względnego adresowania elementów struktury. – Flinsch

Powiązane problemy