Я читал 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
Выравнивание памяти в C/C++ ⇐ C++
Программы на C++. Форум разработчиков
1734389844
Anonymous
Я читал Game Coding Complete, 4-е издание. Была тема про выравнивание памяти. В приведенном ниже коде автор говорит, что первая структура очень медленная, потому что она не выровнена ни по битам, ни по байтам. Второй выровнен не по битам, а по байтам. Последний быстрый, потому что и то, и другое. Он говорит, что без прагмы компилятор сам выровняет память, что приводит к пустой трате памяти. Я так и не смог получить расчеты.
Это часть текста:-
Если бы компилятор был Осталось оптимизировать SlowStruct, добавив неиспользуемые
байты, каждая структура будет иметь размер 24 байта вместо 14. Семь
дополнительных байтов добавляются после первой переменной char, а
оставшиеся байты добавляются в конец. Это гарантирует, что вся
структура всегда начинается на границе 8 байт. Это около 40 процентов
потраченного впустую пространства, и все из-за небрежного порядка переменных-членов.
Это заключительная строка жирным шрифтом:-
[b]Не позволяйте компилятору тратить драгоценное пространство памяти. Заставьте некоторые[/b]
[b]клетки мозга работать и выровняйте свои собственные переменные-члены.[/b]
Покажите мне расчеты и объясните концепцию заполнения более четко.
Код: -
#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)
Подробнее здесь: [url]https://stackoverflow.com/questions/41719845/memory-alignment-in-c-c[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия