STLpartial_sum算法的实际用途是什么?

还有哪些其他有趣/不平凡的示例或用例?

最佳答案

我用它来减少玩具lambda演算解释器中的简单标记清除垃圾收集器的内存使用。

GC池是大小相同的对象数组。目的是消除未链接到其他对象的对象,并将其余对象压缩到数组的开头。由于对象在内存中移动,因此每个链接都需要更新。这需要一个对象重映射表。
partial_sum允许表以压缩格式存储(每个对象少至一位),直到扫描完成并且内存已释放。由于对象很小,因此大大减少了内存使用。

  • 递归标记使用的对象并填充 bool 数组。
  • 使用remove_if将标记的对象压缩到池的开头。
  • 在 bool 值上使用partial_sum可以生成指向新池的指针/索引表。
  • 这行得通,因为第N个标记对象在数组中的N之前为1,并且获得池索引N。
  • 再次扫描池,并使用remap表替换每个链接。

  • 将重映射表放在刚刚释放的内存中,这对数据缓存特别友好,因此仍然很热。

    关于c++ - STL的 'partial_sum'有什么实际用途?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4116388/

    10-09 01:58