> struct mystruct
>{
> char a __attribute__((packed));
> int b __attribute__((packed));
>};
>
> Это просто выровнит одну структуру по размеру.
> а #pragma pack(1) выровниит все программу и
> уменьшив быстродействие. Неа, если писать:
#pragma pack(push,1)
struct _mystruct {
char a;
int b;
};
#pragma pack(pop)
то не все программу, а только конкретную структуру.
Если не поймет, то старая запись:
#pragma pack(1)
struct _mystruct {
char a;
int b;
};
#pragma pack()
Вообще-то правильней использовать __attribute__ так:
struct mystruct {
char a;
int b;
} __attribute__((packed));
При упаковке отдельных элементов результат может отличаться от упаковки всей структуры?
Использование __attribute__ непереносимо под другие компиляторы.
А вот если забыть закрывающий pack, то первый же виртуальный класс выдаст segmentation fault. STL например ))...
Касперски конечно надо почитать... А лучше заранее подумать над алгоритмом. Тогда и оптимизировать не надо будет :)
"использовать в 21ом веке пакованные структуры - это дикость"...
использовать оператор goto тоже, вот только в некоторых случаях лучше выхода чем оператор goto или пакованные структуры еще не придумали.
union тоже выравнивается, так что тоже в pack запихивать надо :)