Пока я читал book о развитии движка физики, я наткнулся на дизайнерское решение, о котором я даже не думал раньше. Это связано с тем, как процессор загружает необработанные байты в памяти.
Рассмотрим следующий класс:
class Foo
{
public:
float x;
float y;
float z;
/* Constructors and Methods */
private:
float padding;
}
Автор утверждает, что заполнение, увеличивающее размер объекта до четырехзначного числа в архитектуре x86, приводит к заметному выигрышу в производительности. Это потому, что 4 слова сидят более аккуратно в памяти, чем 3, что это значит? Отключение объекта с избыточными данными для повышения производительности кажется мне довольно парадоксальным.
Это также задает другой вопрос: а как насчет объектов размером 1 или 2 слова? Если мой класс выглядит примерно так:
class Bar
{
public:
float x;
float y;
/* Constructors and Methods */
private:
/* padding ?? */
}
Должен ли я добавлять дополнение к этому классу, чтобы он сидел более аккуратно в памяти?