#pragma pack(push)
#pragma pack(1)
Изтеглих урок и има тези редове в заглавния файл. Ще съм благодарен, ако можете да ми предоставите уроци или препратки, свързани с това.
#pragma pack(push)
#pragma pack(1)
Изтеглих урок и има тези редове в заглавния файл. Ще съм благодарен, ако можете да ми предоставите уроци или препратки, свързани с това.
Обяснението на Microsoft:
http://msdn.microsoft.com/en-us/library/aa273913(v=vs.60).aspx
Обяснение на AIX xlC на IBM:
По принцип той определя границите на байтовете, които ще се използват при съхраняване на структура или обединение. Push/pop действа като начин за съхраняване и извличане на тези настройки в стек.
За бъдещи справки може да си спестите време, като потърсите в мрежата ключовите думи, за които питате. Всичко, което направих, за да намеря тази информация, беше да потърся „pragma pack“ на http://www.google.com
Всички #pragma
отчети са специфични за доставчика.
Това е специфично за Microsoft и описва колко "пакет" (в байтове) компилаторът може да добави към struct
s за по-добро подравняване.
#pragma pack(push)
просто запазва предишната настройка в стека. След това можете да промените условията за опаковане за определен блок от код и по-късно #pragma pack(pop)
да възстановите предишните настройки.
Това е спецификаторът за пакетиране, специфичен за MSVC++. Можете да разберете какво точно прави от документацията.
Опаковката променя колко подпълване е позволено на компилатора да вмъкне между членовете на данните на дадена структура (или клас), за да поддържа подравняване. В случай на мрежов код, спецификаторът #pragma pack
вероятно се използва, така че структурата да може да бъде прехвърлена към char*
или void*
, за да бъде предадена на някакъв мрежов API, за да изпрати цялата структура по мрежата наведнъж.
(Имайте предвид, че това не е безопасно, тъй като различните машини имат различни правила за подравняване и ред на байтове; това ще работи само ако и двете машини от всеки край на кабела използват един и същ тип хардуер)