я только узнал о дополнении, и я пытался сделать некоторые тесты по этому поводу, я попытался собрать эту структуру:упаковка структуры, которая содержит строку
struct B {
int a,b,c;
string s;
char x;
string t;
char y;
string u;
}__attribute__((packed)) ;
Но я получаю это предупреждение:
warning: ignoring packed attribute because of unpacked non-POD field 'std::string B::u'
string u;
Означает ли это, что структуры, содержащие strings
, не могут быть упакованы? Есть ли другой способ сделать это? если это влияет на производительность?
_ «Означает ли это, что строки не могут быть упакованы?» _ Очевидно, они не могут. Вероятно, у вас есть неправильное представление о том, что такое C++ 'std :: strings'. Они отличаются от 'char []' массивов. –
Я не хотел упаковывать строку, я хотел упаковать структуру, содержащую строку –
. Объекты 'std :: string' будут содержать указатели, которые в зависимости от процессора могут быть выровнены для оптимальной производительности или просто избежать аварии. Другие классы не могут прийти и ретроспективно изменить свои потребности в выравнивании при их упаковке. –