Math 通过数学找到小组,然后找到小组中的位置,给定一个全局位置?

Math 通过数学找到小组,然后找到小组中的位置,给定一个全局位置?,math,optimization,Math,Optimization,假设我有一堆“slab”(在slab内存分配器中),每个slab是4096字节。我们可以有一个由多个板组成的“缓存”。每个缓存用于特定的“对象类型”,每个对象类型都有特定的大小 假设我们有一个12字节的对象。这将为我们提供4096/12=341个对象/楼板 现在,假设这些板连接在一起形成一个连续的数组,我们想找到1021项。我会通过反复试验来做到这一点,但是是否有一个最佳公式来计算您需要采取的两个步骤? 我要做的是: let perSlab = 341 let index = 1021 let

假设我有一堆“slab”(在slab内存分配器中),每个slab是4096字节。我们可以有一个由多个板组成的“缓存”。每个缓存用于特定的“对象类型”,每个对象类型都有特定的大小

假设我们有一个12字节的对象。这将为我们提供4096/12=341个对象/楼板

现在,假设这些板连接在一起形成一个连续的数组,我们想找到1021项。我会通过反复试验来做到这一点,但是是否有一个最佳公式来计算您需要采取的两个步骤?

我要做的是:

let perSlab = 341
let index = 1021
let slabs = [ [...], [...], ... ]
if (index > perSlab) {
  let slabIndex = Math.floor(index / perSlab)
  let remainder = index - (slabIndex * perSlab)
  let item = slabs[slabIndex][remainder]
} else {
  let item = slabs[0][index]
}

有没有一种更干净、更优化的方法来减少运算量?

您的解决方案似乎很短,您是否在尝试不必计算除法和余数?如果在进行除法时这是x86/x64程序集,则同时也会得到剩余部分。在我看来,你需要除法和余数。或者可能是一些指针的东西,你可以计算偏移量为12*1021,并在那里建立索引(但在JS中,我不认为你能做到这一点,但不确定)