我应该将数字存储在字符中以节省内存吗?

时间:2018-09-04 21:55:20

标签: c++ variables

问题很简单。我应该在char或uint_8t变量类型中存储一些不会超过255的数字以节省内存吗?

节省几个字节的内存是普遍的还是值得的?

4 个答案:

答案 0 :(得分:2)

取决于您的处理器和平台所拥有的内存量。 对于16位,32位和64位处理器,这没有多大意义。在32位处理器上,它喜欢32位数量,因此您将使其工作起来更加困难。这些处理器具有32位数字(包括寄存器),效率更高。

请记住,您正在为处理时间交换内存空间。与不打包相比,打包值和打包将花费更多的执行时间。

某些嵌入式系统受空间限制,因此限制大小是合理的。

在当前的计算中,可靠性(也称为鲁棒性)和质量在优先级列表上很高。内存效率和程序效率在优先级上已经降低。开发成本也可能比担心内存节省高。

答案 1 :(得分:0)

这主要取决于您必须存储多少个号码。如果您有数十亿个,那么是的,将它们尽可能紧凑地存储是有意义的。如果只有几千个,则没有,这可能没有意义。如果您有数百万,则值得商

答案 2 :(得分:0)

根据经验,int是平台上整数的“自然大小”。您可能需要一些额外的代码字节来读取和写入其他大小的变量。不过,如果您有成千上万个小值,那么值得多节省一些代码字节。

因此,std::vector<unsigned char> vc;比仅仅一个unsigned char c;值有意义得多。

答案 3 :(得分:-1)

如果它是局部变量,则几乎没有关系(根据我的经验,使用不同优化选项的不同编译器在使用不同类型选择时会(通常可以忽略不计)会更好)。

如果由于您有很多个实体而将其保存在其他位置(静态内存/堆),那么uint_least8_t可能是最佳选择(通常保证最少和快速的类型存在;确切宽度类型通常不是)。

unsigned char也将可靠地提供足够的位(保证UCHAR_MAX至少为255,并且由于保证sizeof(unsigned char)为1和sizeof(AnyType) >= 1,因此不可能有较小的无符号整数类型。