Описание тега pragma-pack

Упаковка класса или структуры для размещения его членов непосредственно друг за другом в памяти, что может означать, что некоторые или все члены могут быть выровнены по границе, меньшей, чем выравнивание по умолчанию целевой архитектуры
1 ответ

Проверка времени компиляции для использования #pragma pack

Большинство компиляторов поддерживают изменение упаковки класса с помощью #pragma pack(N) директива, где N это новое минимально приемлемое выравнивание для каждого члена. Можно ли проверить во время компиляции, действительно ли #pragma pack(N) был у…
10 окт '18 в 02:32
2 ответа

Копирование структуры в байтовый массив

У меня есть 1-байтовая прагма упакованная структура в C, которую я хочу скопировать в байтовый массив для целей сериализации, чтобы отправить через последовательный порт. #pragma pack(push, 1) typedef struct { uint8_t ck_a; uint8_t ck_b; } UBXChecks…
06 фев '19 в 11:26
3 ответа

Область применения директивы пакета прагмы в Visual Studio

Какова сфера действия #pragma pack выравнивание в Visual C++? Ссылка на API https://msdn.microsoft.com/en-us/library/vstudio/2e70t5y1%28v=vs.120%29.aspx гласит: Пакет вступает в силу при первом объявлении struct, union или class после того, как праг…
2 ответа

Является ли `#pragma pack(1)` рискованным / опасным, если структура содержит только байтовые массивы

Это опасно / рискованно использовать #pragma pack(1) на структурах, которые содержат только байтовые массивы? Например, этот: #pragma pack(1) struct RpcMessage { uint8_t proto_info[16]; uint8_t message_uuid[16]; uint8_t arg0[16]; uint8_t arg1[16]; u…
24 окт '18 в 13:57
1 ответ

C++ #pragma pack

Что на самом деле делает следующее утверждение и каковы его последствия? #pragma pack(push,8)
25 окт '10 в 12:41
1 ответ

Передача адреса упакованного члена структуры

Я разрабатываю приложение на C/C++, где я использую упакованные члены структуры. Я читал, что мы никогда не должны передавать адрес упакованных членов структуры какой-либо функции (я всегда использовал, чтобы получить ошибки выравнивания при передач…
29 июн '18 в 17:10
3 ответа

Почему #pragma pack(1) Рассматривает 6-битный член структуры как 8-битный?

Я застрял о #pragma pack(1) неправильное поведение при определении 6-bit поле и предполагает, что это 8-bit, Я прочитал этот вопрос, чтобы решить мою проблему, но это не помогает мне вообще. В Visual Studio 2012 я определил ниже struct для сохранени…
21 авг '18 в 06:58
10 ответов

#pragma pack effect

Мне было интересно, если кто-то может объяснить мне, что #pragma pack заявление препроцессора делает, и что более важно, почему кто-то хотел бы использовать его. Я проверил страницу MSDN, которая дала некоторое представление, но я надеялся услышать …
23 июл '10 в 13:12
1 ответ

Пакет прагмы (push) на iphone

У меня есть структура внутри #pragma pack(push,1) а также #pragma pack(pop), Я хотел бы знать, будет ли это правильно работать на компиляторе iphone, и могут ли быть другие побочные эффекты вне этих макросов. Спасибо, Раксван.
11 янв '12 в 13:09
1 ответ

В чем разница между __attribute__((__pack__)); и #pragma pack(1)

Я портирую код, который отлично работает на Linux для Windows Visual C++. У меня есть этот код в Linux: struct exif_desc { uint16_t tag; uint16_t type; uint32_t length; uint32_t value; } __attribute__((__packed__)); Я получаю сообщение об ошибке в W…
25 авг '15 в 16:02
4 ответа

Небезопасен ли пакет gcc __attribute__((упакованный)) / #pragma pack?

В C компилятор будет размещать элементы структуры в порядке, в котором они объявлены, с возможными байтами заполнения, вставляемыми между элементами или после последнего, чтобы гарантировать правильное выравнивание каждого элемента. GCC предоставляе…
19 дек '11 в 22:28
1 ответ

Как должен работать #pragma pack(8)?

Я новичок в структуре выравнивания и упаковки. Я думал, что понял это, но я нахожу некоторые результаты, которые я не ожидал (см. Ниже). Мое понимание выравнивания структуры: Типы обычно выровнены по адресам памяти, кратным их размеру. Обивка добавл…
07 сен '16 в 01:16
0 ответов

Плотно упакованная структура получает избыточное неправильное заполнение, используя mingw-g++ в Linux

* Фон * У меня есть следующая структура: struct LayerConfig { // General Configuration Parameters unsigned int sel_idb_ilmn : 8; unsigned int sel_audio_lite_port : 8; unsigned int idb_2d_offset : 16; unsigned int idb_2d_shift_step : 16; unsigned int…
22 июл '19 в 11:36
1 ответ

Расположение байтов структуры (поведение #pragma pack) отличается в MSVC от clang/gcc

Следующий код создает другой макет в памяти на MSVC и clang/gcc. Зачем? #include <stdio.h> #pragma pack(push,1) struct empty_struct { }; class derived_struct : public empty_struct { int m_derivedMember; }; class derived_struct_container : publ…
11 мар '20 в 03:17
1 ответ

pragma pack(push) без соответствующего pop приводит к разбиению стека

Я использовал #pragma pack(push, 2) в начале структуры в файле заголовка, но забыл соответствующий #pragma pack(pop). После включения этого файла заголовка я включил fstream. При созданииofstreamобъект, я вижу разбивание стека. Подробности точного с…
1 ответ

wcslen() возвращает неверный результат при использовании пакета прагмы

Я обнаружил, что wcslen () возвращает неверный результат на gcc (и исправляет на msvc), когда источником является массив wchar_t, член упакованной структуры. Я знаю, что в linux sizeof(wchar_t) == 4 и в Windows его 2, но до сих пор не могу понять, к…
22 окт '19 в 21:18
2 ответа

Почему #pragma pack также влияет на собственное выравнивание структур?

Я заметил, что когда вокруг структуры используется #pragma pack, это влияет не только на выравнивание внутри нее, но и на выравнивание самой структуры. Учтите следующее: #include <stdio.h> #include <stdint.h> #pragma pack(1) typedef stru…
24 фев '20 в 10:31
1 ответ

#pragma pack(1) вызывает ошибку сегментации

В какой-то момент код моего большого проекта начал получать ошибки времени выполнения segmentation fault с такой трассировкой стека: 0# std:: basic_ios>:: widen (__c = 10 '\ n', this =) в /usr/include/c++/7/bits/basic_ios.h:450 1 # std:: endl> (__os…
09 фев '20 в 09:17
2 ответа

Макрос C для встраивания функций с компилятором IAR

С предыдущим компилятором gcc мы сделали это: #define DO_PRAGMA(x) _Pragma(#x) #define PACK_ON(n) DO_PRAGMA(pack(n)) так что фактически означало бы, что PACK_ON (2) будет расширяться до _Pragma(pack (2)). Затем мы будем использовать его так PACK_ON(…
04 мар '21 в 14:20
1 ответ

Как правильно выровнять конструкцию?

Я пытаюсь выровнять структуру с помощью директивы (#pragma pack). Мне нужен размер 112 байт. (14*8=112 байт). Однако у него всего 80 байт. Как это сделать правильно? #pragma pack (8) struct Deal { long deal_ticket; long order_ticket; long position_t…
23 сен '21 в 10:41