【发布时间】:2017-07-08 11:58:28
【问题描述】:
我有一个与大量小整数(实际上是十进制数字)有关的问题。存储此类数据的空间有效方式是什么?
使用std::bitset<4> 存储一位十进制数字是个好主意吗?
【问题讨论】:
-
什么为您的 bitset 提供 sizeof?
-
你的号码都是个位数吗?你有多少号?您需要按位置访问数字吗?您愿意以性能换取空间效率吗? 显然,在进行这种优化之前,您必须弄清楚您需要什么! 在大多数情况下,使用适当的整数或字符类型可能就足够了。
-
另外,您是否可以在数字序列或该序列的一部分中利用模式?某些数字是否可能比其他数字更频繁地出现?如果是这样,您也许可以使用某种编码,而不是直接表示。
-
请记住,在使用任何数学、比较或 I/O 之前,您的程序需要花费执行时间打包和解包。您将以性能换取空间。
-
除非这是一个空间受限的系统,否则我不推荐压缩。我建议使用外部存储而不是压缩。压缩会插入更多代码,并且随着代码的增多,可能会有更多的注入缺陷需要解决。