WedX - журнал о программировании и компьютерных науках

как перевести структуру упаковки из vc++ в gcc

Как перевести приведенные ниже команды упаковки vc++ в команды gcc в Linux? Я знаю, как это сделать для одной структуры, но как это сделать для диапазона структур?

#pragma pack(push, 1) // exact fit - no padding
//structures here
#pragma pack(pop) //back to whatever the previous packing mode was
c++
18.12.2012

  • Поскольку gcc поддерживает команды компилятора pragma pack, мы можем придерживаться приведенного выше кода. 18.12.2012
  • См. это тоже... ссылка 18.12.2012
  • спасибо, Неон, я еще раз тщательно протестирую свою программу 18.12.2012
  • Обычные компиляторы будут довольны pragma pack включая borland, digital mars, gcc. Таким образом, вы можете оставить это, если не планируете использовать менее распространенные компиляторы. Целевая платформа также имеет значение. Надеюсь, у вас x86. В противном случае вам может понадобиться дополнительная информация. 18.12.2012

Ответы:


1

Для этого вы можете добавить атрибут((packed)) к отдельным элементам данных. В этом случае упаковка применяется для элемента данных, поэтому нет необходимости восстанавливать старый режим.

Пример: для конструкций:

typedef struct _MY_STRUCT
{

}__attribute__((packed)) MY_STRUCT;

Для членов данных:

struct MyStruct {

    char c;

    int myInt1 __attribute__ ((packed));

    char b;

    int myInt2 __attribute__ ((packed));

};
18.12.2012

2

gcc также поддерживает эти прагмы. См. документацию по компилятору по адресу: https://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.html

в качестве альтернативы вы можете использовать более специфичный для gcc

__attribute__(packed)

пример:

struct foo {
  int16_t one;
  int32_t two;
} __attribute__(packed);

https://gcc.gnu.org/onlinedocs/gcc-3.3.6/gcc/Type-Attributes.html

18.12.2012
  • да. Я действительно знаю, как это сделать для одной структуры. Как мне сделать это для диапазона структур? 18.12.2012
  • Поскольку gcc поддерживает команды компилятора pragma pack, почему бы не сделать это так же? 18.12.2012

  • 3

    Согласно https://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.html, gcc должен напрямую поддерживать #pragma pack, чтобы вы могли использовать его напрямую как есть.

    gcc way указания выравнивания — это __attribute__((aligned(x))), где x — требуемое выравнивание.

    Вы также можете использовать __attribute__((packed)) для указания плотно упакованной структуры.

    См. https://gcc.gnu.org/onlinedocs/gcc-3.2/gcc/Type-Attributes.html

    18.12.2012
    Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: [email protected]