Выравнивание памяти в C/C++C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Выравнивание памяти в C/C++

Сообщение Anonymous »

Я читал Game Coding Complete, 4-е издание. Была тема про выравнивание памяти. В приведенном ниже коде автор говорит, что первая структура очень медленная, потому что она не выровнена ни по битам, ни по байтам. Второй выровнен не по битам, а по байтам. Последний быстрый, потому что и то, и другое. Он говорит, что без прагмы компилятор сам выровняет память, что приводит к пустой трате памяти. Я так и не смог получить расчеты.

Это часть текста:-


Если бы компилятор был Осталось оптимизировать SlowStruct, добавив неиспользуемые
байты, каждая структура будет иметь размер 24 байта вместо 14. Семь
дополнительных байтов добавляются после первой переменной char, а
оставшиеся байты добавляются в конец. Это гарантирует, что вся
структура всегда начинается на границе 8 байт. Это около 40 процентов
потраченного впустую пространства, и все из-за небрежного порядка переменных-членов.


Это заключительная строка жирным шрифтом:-


Не позволяйте компилятору тратить драгоценное пространство памяти. Заставьте некоторые
клетки мозга работать и выровняйте свои собственные переменные-члены.


Покажите мне расчеты и объясните концепцию заполнения более четко.

Код: -

#pragma pack(push, 1)
struct ReallySlowStruct
{
char c : 6;
__int64 d : 64;
int b : 32;
char a : 8;
};

struct SlowStruct
{
char c;
__int64 d;
int b;
char a;
};

struct FastStruct
{
__int64 d;
__int b;
char a;
char c;
char unused[2];
};
#pragma pack(pop)


Подробнее здесь: https://stackoverflow.com/questions/417 ... ent-in-c-c
Ответить

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

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

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

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

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