基本队列优化

时间:2012-10-02 01:08:34

标签: optimization queue

如何优化典型的队列:

访问/存储

内存使用

我不确定除了尝试在其上运行压缩算法之外还要减少内存,但这需要相当多的存储时间作为权衡 - 人们必须重新压缩我认为的所有内容。

因此,我正在考虑带指针的典型链表....一个圆队列?

有什么想法吗?

由于

编辑:无论上面是什么;如何制作最快/最不占用内存的基本队列结构?

1 个答案:

答案 0 :(得分:1)

链接列表实际上不是很典型(除了功能语言或新手错误地认为链表比动态数组更快)。动态循环缓冲区更典型。增长(和可选地,缩小)的工作方式与动态数组的工作方式略有不同:如果“数据保持部分”穿过数组的末尾,则应将数据复制到新空间,使其保持连续(简单地扩展数组会在数据中间产生间隙。)

像往常一样,它有一些优点和一些缺点。

缺点:

  • 稍微复杂一点的实施
  • 不适合无锁同步

优点:

  • 更紧凑:在最糟糕的情况下(当它刚刚增长或即将缩小但尚未缩小时)它的空间开销约为100%,单链表几乎总是 开销为100%或更多(除非数据元素大于指针),双链表更差。
  • 缓存效率:读取接近于先前的读取,写入发生在前一次写入附近。因此,缓存未命中很少见,当它们确实发生时,它们会读取大部分相关的数据(或者在写入的情况下:它们会获得可能很快再次写入的缓存行)。在链表中,局部性很差,每个缓存未命中的一半都被浪费在开销上(指向其他节点的指针)。

通常这些优点胜过缺点。