Должен ли я хранить цифры в символах, чтобы сохранить память? - PullRequest
0 голосов
/ 05 сентября 2018

Вопрос довольно прост. Стоит ли хранить некоторые числа, которые не будут превышать 255, в переменных типа char или uint_8t для экономии памяти?

Это обычно или даже стоит сэкономить несколько байтов памяти?

Ответы [ 4 ]

0 голосов
/ 05 сентября 2018

Как правило, int - это "натуральный размер" целых чисел на вашей платформе. Для чтения и записи переменных других размеров вам потребуется несколько дополнительных байтов кода. Тем не менее, если вы получили тысячи небольших значений, несколько дополнительных байтов кода стоит экономии данных.

Итак, std::vector<unsigned char> vc; имеет гораздо больше смысла, чем просто одно значение unsigned char c;.

0 голосов
/ 05 сентября 2018

Если это локальная переменная, это в основном не имеет значения (из моего опыта разные компиляторы с разными вариантами оптимизации (как правило, пренебрежимо) лучше с разными вариантами выбора).

Если он сохранен в другом месте (статическая память / куча), потому что у вас есть много этих сущностей, тогда, вероятно, лучшим выбором будет uint_least8_t (как правило, гарантируется существование наименьшего и быстрого типа; точный типы ширины, как правило, нет).

unsigned char также будет надежно предоставлять достаточно битов (UCHAR_MAX гарантированно будет по крайней мере 255, и поскольку sizeof(unsigned char) гарантированно будет 1 и sizeof(AnyType) >= 1, не может быть никакого целочисленного типа без знака, который меньше).

0 голосов
/ 05 сентября 2018

Это зависит в основном от того, сколько цифр вам нужно хранить. Если у вас их миллиарды, то да, имеет смысл хранить их максимально компактно. Если у вас всего несколько тысяч, то нет, это, вероятно, не имеет смысла. Если у вас есть миллионы, это спорно.

0 голосов
/ 05 сентября 2018

Зависит от вашего процессора и объема памяти вашей платформы. Для 16-битных, 32-битных и 64-битных процессоров это не имеет большого смысла. На 32-битном процессоре ему нравятся 32-битные величины, поэтому вы заставляете его работать немного сложнее. Эти процессоры более эффективны с 32-разрядными числами (включая регистры).

Помните, что вы торгуете памятью для обработки времени. Стоимость упаковки и распаковки будет стоить больше времени выполнения, чем не упаковка.

Некоторые встраиваемые системы ограничены в пространстве, поэтому ограничение по размеру имеет смысл.

В современных вычислениях надежность (например, надежность) и качество являются приоритетными в списке приоритетов. Эффективность памяти и эффективность программ опустились ниже по приоритетной лестнице. Стоимость разработки также, вероятно, выше, чем беспокойство об экономии памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...