Часто мне приходится представлять структуру, состоящую из очень малых значений. Например, Foo
имеет 4 значения, a, b, c, d
, которые варьируются от 0 to 3
. Обычно мне все равно, но иногда эти структуры
-
используется в замкнутом цикле;
-
их значения считываются в миллиард раз/с, а это узкое место программы;
-
вся программа состоит из большого массива миллиардов
Foo
s;
В этом случае у меня возникают проблемы с тем, как эффективно представлять Foo
. У меня есть в основном 4 варианта:
struct Foo {
int a;
int b;
int c;
int d;
};
struct Foo {
char a;
char b;
char c;
char d;
};
struct Foo {
char abcd;
};
struct FourFoos {
int abcd_abcd_abcd_abcd;
};
Они используют 128, 32, 8, 8 бит соответственно за Foo
, от редких до плотно упакованных. Первый пример, вероятно, самый лингвистический, но использование его существенно увеличило бы в 16 раз больше размера программы, что звучит не совсем правильно. Более того, большая часть памяти будет заполнена нулями и не будет использоваться вообще, что заставляет меня задаться вопросом, не является ли это пустой тратой. С другой стороны, упаковка их плотно приносит дополнительные накладные расходы для их чтения.
Что такое вычисляемый "самый быстрый" метод для представления небольших значений в структуре?