C++ 重新定义原语类型,以便快速更改RAM使用情况,提高可读性(并可能提高性能)

C++ 重新定义原语类型,以便快速更改RAM使用情况,提高可读性(并可能提高性能),c++,primitive-types,redefine,C++,Primitive Types,Redefine,在花了相当长的时间在多个程序上之后,我发现,根据平台的不同,我有时需要大幅降低RAM使用率,因为某些平台上的资源非常有限。我通常按照这些类型存储大型映射和矩阵,因此从int32切换到int16或从float切换到double(如果它们实际上大小不同)可以轻松地将使用量减少近一半。 因此,我刚刚添加了如下重新定义: typedef double Float; typedef int32_t Int; typedef uint32_t UInt; 这使我能够快速调整程序中所有重要的基元类型。请注意

在花了相当长的时间在多个程序上之后,我发现,根据平台的不同,我有时需要大幅降低RAM使用率,因为某些平台上的资源非常有限。我通常按照这些类型存储大型映射和矩阵,因此从int32切换到int16或从float切换到double(如果它们实际上大小不同)可以轻松地将使用量减少近一半。 因此,我刚刚添加了如下重新定义:

typedef double Float;
typedef int32_t Int;
typedef uint32_t UInt;
这使我能够快速调整程序中所有重要的基元类型。请注意,程序中的整数实际上都没有超过2字节整数的大小,因此使用int16到int64中的任何一个都没有问题

此外,在这里使用一个漂亮的“Int”而不是“uint32\u t”似乎更具可读性。在某些情况下,我观察到了性能的变化,通过减少和增加原语类型的大小

我的问题是:有没有什么缺点我只是错过了?我还没有找到关于这个话题的任何东西,所以如果我错过了,请带我去那里。该代码主要是为我编写的,其他人可能会看到它,但在任何情况下,它都是由我个人或带有适当文档的人提供的


编辑:为过去的错误感到抱歉,我确实使用了typedefs。

typedef int32\t Int不错,但是
typedef双浮点数不好。因为它令人困惑:实际上,
Float
是一个double

为什么不使用预处理器定义两组类型,一组用于大型类型,另一组用于小型类型

#ifdef大
typedef int32_t Int;
typedef双实数;
#否则
typedef int16_t Int;
typedef浮点实数;
#恩迪夫
void f(){

cout
typedef int32\u t Int;
不错,但是
typedef double Float;
不好。因为它让人困惑:实际上,
Float
是一个double

为什么不使用预处理器定义两组类型,一组用于大型类型,另一组用于小型类型

#ifdef大
typedef int32_t Int;
typedef双实数;
#否则
typedef int16_t Int;
typedef浮点实数;
#恩迪夫
void f(){

我可以看到的一个“缺点”是当与他人共享代码时,因为他们不习惯typedef。如果你检查边界,你应该使用数字限制,而不是硬编码(通常更好)因为当您将类型更改为较小的类型时,边界也会change@Hayt谢谢你的评论。是的,我考虑过一般使用数字限制。但是,我得到的最大整数大约是2000-3000,在我的程序中没有办法超过这个。对于浮点,它是类似的。如果你从来没有超过限制对于较小的类型,有什么理由不无条件地使用它们吗?此外,在现代体系结构上,类型
Int
只有16位的想法让我感到害怕。Qt做了类似的事情:
qreal
typedef
d
double
在x86上,是
float
在arm上。也许你也可以使用real inst为避免混淆,请读取Float。@SebastianRedl通常是的,但我观察到一些平台上较小类型的性能受到影响。我可以看到的一个“缺点”是与其他人共享代码时,因为它们不适用于typedef。如果检查边界,则应使用数字限制,而不是硬编码(通常哪个更好)因为当您将类型更改为较小的类型时,边界也会change@Hayt谢谢你的评论。是的,我考虑过一般使用数字限制。但是,我得到的最大整数大约是2000-3000,在我的程序中没有办法超过这个。对于浮点,它是类似的。如果你从来没有超过限制对于较小的类型,有什么理由不无条件地使用它们吗?此外,在现代体系结构上,类型
Int
只有16位的想法让我感到害怕。Qt做了类似的事情:
qreal
typedef
d
double
在x86上,是
float
在arm上。也许你也可以使用real inst为避免混淆,请使用浮点值。@SebastianRedl通常是的,但我观察到一些平台上较小类型的性能会受到影响。我喜欢预处理器定义的想法。我必须使其更易于调整,因为只有小/大类型不能始终覆盖它,但我很可能会这样做。“真的”另外,它是一个很好的名字,我在过去给它命名为FloatPt,指的是一个普通的浮点,但“Real”确实更好。我喜欢预处理器定义的想法。我必须使它更具可调整性,因为只有小/大并不总是包含它,但我很可能会这样做。“Real”另外,这是一个很好的名字,我以前给它命名为FloatPt,指的是一个普通的浮点,但“Real”确实更好。
#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;
}