Ошибки, баги, вопросы - страница 2503

[Удален]
TheXpert:

да хорош уже )

#pragma pack отлично пашет на gcc в том числе, а то что вы написали это как раз внутренний атрибут gcc, который работает не так, как работает aligned.

Ну и что этот пример показывает? Что вы не разобрались с использованием alignas? Даже компилятор на код ругается:

1.cc:7:3: warning: attribute ignored in declaration of 'struct A' [-Wattributes]
    7 | } alignas(4) ;
      |   ^~~~~~~
1.cc:7:3: note: attribute for 'struct A' must follow the 'struct' keyword

#pragma pack странная поделка мелкомягких, которые gcc поддерживает лишь для совместимости.

Vict:

Ну и что этот пример показывает? Что вы не разобрались с использованием alignas?

согласен, затупил

вот правильный код

#include <iostream>
struct alignas(4) A
{
  short j;
}  ;

int main()
{
   A q[2];
   std::cout << sizeof(q) << std::endl; // 8
   return 0;
}

значит alignas не аналог упаковке.

потому что в том же gcc (чтобы без мелкомягких) кратность упаковки по умолчанию 8

потому что:

#include <iostream>
struct A
{
  short j;
};

struct B
{
  short j;
  long long k;
};

int main()
{
   A q[2];
   B r[2];
   std::cout << sizeof(q) << " " << sizeof(r) << std::endl; // 4 32
   return 0;
}

а вот с alignas(8)

#include <iostream>
struct alignas(8) A
{
  short j;
};

struct alignas(8) B
{
  short j;
  long long k;
};

int main()
{
   A q[2];
   B r[2];
   std::cout << sizeof(q) << " " << sizeof(r) << std::endl; // 16 32
   return 0;
}
Причем заметьте это дефолтное поведение, а не для совместимости с мелкомягкими
[Удален]
TheXpert:
Причем заметьте это дефолтное поведение, а не для совместимости с мелкомягкими

Не въехал в мысль. Всё отлично в примере, не вижу проблем. Дефолтно - выравнивание структуры == взять самое строгое требование-выравнивание среди членов.

struct {char;} == 1, struct {char; short} == 2, struct {char; int} == 4 и т.д.. Оно ведь так везде. А у long long == восемь, вот и alignas не имеет эффект.

Vict:

Не въехал в мысль. Всё отлично в примере, не вижу проблем.

Да, вы правы, пример не показатель.

В итоге получается, что mql pack работает как #pragma pack а не как alignas.

Люди, поделитесь информацией. Вы для каких целей используете выравнивание?
Francuz:
Люди, поделитесь информацией. Вы для каких целей используете выравнивание?

это Еното-ориентированное программирование !

увы, без этого никак ;)

Igor Makanu:

это Еното-ориентированное программирование !

увы, без этого никак ;)

Я в курсе. Я же не прошу меня учить ООП. Я спросил, кто в каких целях использует выравнивание?

[Удален]
Francuz:
Люди, поделитесь информацией. Вы для каких целей используете выравнивание?

Это всё очень пригодится в многопоточной среде, я так вижу. Каким боком здесь МКЛ? Да х.з., вопрос задали, вот и встрял.

Ну и вообще - это основы, элементарное понимание необходимо любому приличному программисту.

ЗЫ: ну и тут много фанатов скорости, если начнут всё ровнять по уму, то должны полететь ещё быстрее, в теории по крайней мере.
Francuz:
Люди, поделитесь информацией. Вы для каких целей используете выравнивание?
Это может быть необходимо при передаче структур во внешние библиотеки.