Могу ли я заставить компилятор использовать здесь более эффективное расположение данных?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Могу ли я заставить компилятор использовать здесь более эффективное расположение данных?

Сообщение Anonymous »

В моей настройке следующая структура занимает 16 байт:

Код: Выделить всё

struct MyExampleStruct
{
double d;
char b;
};
Из-за правила, согласно которому размер структуры округляется до минимального выравнивания ее наибольшего члена. Самый большой член имеет выравнивание 8, поэтому его размер округляется до 16. Если я добавлю целое число:

Код: Выделить всё

struct MyExampleStruct
{
double d;
char b;
int i;
};
Это все равно 16 байт. У char выравнивание 1 и так идет по адресу 8. У int выравнивание 4 и так идет по адресу 12, занимает четыре байта, результат 16 байт, все равно. Теперь о следующем:

Код: Выделить всё

struct ContainingStruct
{
MyExampleStruct f;
int i;
};
Теперь, по сути, я бы предпочел тот же макет, что и в предыдущем примере, однако, поскольку правила выравнивания и заполнения применяются одинаково, MyExampleStruct имеет размер 16, int идет по адресу 16, занимает 4 байта, это 20, однако правило заключается в том, что размер округляется до выравнивания наибольшего члена, поэтому размер ContainingStruct равен 24. Могу ли я сделать компилятор более эффективным здесь или нет?

Подробнее здесь: https://stackoverflow.com/questions/791 ... ayout-here
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»