Переопределите примитивные типы для быстрого изменения использования оперативной памяти, лучшей читабельности (и, возможно, повышения производительности)

После довольно длительного времени, проведенного в нескольких программах, я обнаружил, что, в зависимости от платформы, мне иногда приходится резко снижать использование ОЗУ из-за крайне ограниченных ресурсов на некоторых платформах. Обычно я храню большие карты и матрицы в терминах этих типов, поэтому переключение с int32 на int16 или с float на double (в случае, если они на самом деле имеют разный размер) легко уменьшает мое использование почти вдвое.
Таким образом, я только что добавил переопределения как таковые:

typedef double Float;
typedef int32_t Int;
typedef uint32_t UInt;

Это позволяет мне быстро настроить все важные типы примитивов в моей программе. Обратите внимание, что ни одно из моих целых чисел в программе на самом деле не превышает размер 2-байтового целого числа, поэтому нет проблем с использованием любого из int16 до int64.

Кроме того, кажется немного более удобочитаемым, чтобы просто иметь хороший «Int» вместо «uint32_t». И в некоторых случаях я наблюдал изменение в производительности как за счет уменьшения размера примитивных типов, так и увеличения его.

У меня вопрос: есть ли недостатки, которые я просто пропускаю? Я пока не мог найти что-нибудь об этой теме на SO, поэтому, пожалуйста, ведите меня туда, если я тоже это пропустил. Код в первую очередь для меня, другие могут его увидеть, но в каждом случае он будет дан лично мной или с соответствующей документацией.

РЕДАКТИРОВАТЬ: Извините за прошлую ошибку, я действительно использую typedefs.

0

Решение

typedef int32_t Int; это не плохо, но typedef double Float; не хорошо. Потому что это сбивает с толку: Float это на самом деле двойной !?

Почему бы не использовать препроцессор для определения двух наборов типов, один для большой типы, и один для маленький типы.

#ifdef LARGE
typedef int32_t Int;
typedef double Real;
#else
typedef int16_t Int;
typedef float Real;
#endif
void f() {
cout << sizeof(Int) << endl;
cout << sizeof(Real) << endl;
}

Использовать большой типы: g++ -o test test.cpp -DLARGE

Использовать маленький типы: g++ -o test test.cpp

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]