问题很简单。我应该在char或uint_8t变量类型中存储一些不会超过255的数字以节省内存吗?
节省几个字节的内存是普遍的还是值得的?
答案 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
,因此不可能有较小的无符号整数类型。