2017-02-22 32 views
0

需要存储的字节的最小数目以下对象:字节的最小数量需要

  1. 整数 - 之间0 - 364847
  2. 整数 - 之间0 - 37337
  3. 页面状态
    • 在使用(我将使用单个位)
    • 免费
  4. 模式
    • 只读
    • 只写
    • 仅执行的
    • 读写
    • 读取执行
    • 读取写入执行

我认为至少需要6个字节,但我不确定。另外,我们可以使用一个字节中的未使用位来存储页面状态和模式吗?

+0

您存储了多少亿的记录,您需要关注每一个宝贵的位? – tadman

回答

1

理论极限(有算术打包)是log2(364848*37338*3*6) = 37.8352180528...比特每记录小于5字节。但是访问这样打包的数据将需要昂贵的整数分区。仔细想想你是否真的想要这样。

如果你让每个字段占用不同的位,你会得到ceil(log2(364848))+ceil(log2(37338))+ceil(log2(3))+ceil(log2(6)) = 40位,这正好是5字节,并允许通过简单的位移和掩码进行快速访问。

+0

谢谢。我们不能只使用3位模式? 如果是RW,则设置Read = 1和Write = 1,依此类推。 (log2(364848))+ ceil(log2(37338))+ ceil(log2(3))+ ceil(log2(3))= 39' – Kattu

+0

@Kattu'6'是一些状态,而不是位数。这将是'ceil(log2(364848))+ ceil(log2(37338))+ ceil(log2(3))+ 3',它自从'ceil(log2(6))= 3以来实际上是相同的40位'。 –

相关问题