Упаковка структуры, содержащей строку

Я только что узнал о набивке, и я пытался сделать несколько тестов по этому поводу,
Я попытался упаковать эту структуру:

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 не может быть упакован? Есть ли другой способ сделать это? Если это так, это влияет на производительность?

4

Решение

Хорошее эмпирическое правило — сортировать участников от самых больших до самых маленьких. Таким образом, ваши данные выровнены и (обычно) не имеют пробелов. Например. на VS2013 для цели x64 следующая схема требует 112 вместо 128 байтов:

struct B {
string s,t,u;
int a,b,c;
char x,y;
};

Однако для цели x86 это экономит только 4 байта. То, влияет ли это на вашу производительность или нет, зависит от многих других факторов, которые могут быть определены только путем измерения.

2

Другие решения


По вопросам рекламы [email protected]