Die*_*Epp 15
它std::queue是一个容器适配器,而不是容器本身.那么让我们比较一些实际容器的开销:
std::vector它的内存效率非常高,它几乎消耗了零开销.一个std::vector<int>使用每个项目约4个字节,在大多数平台上.
std::list内存非常低效,它可能会使用每个项目的两个开销指针.A std::list<int>在64位平台上每个项目使用大约24个字节,在32位平台上使用12个字节.
std::deque介于两者之间,它是默认容器std::queue.根据"内存开销是怎么回事std::deque",MSVC双端队列是一个块列表,每个块包含大约16个字节,如果你的队列中包含一个或两个int,你就会有很多开销.队列
影响开销的另一个因素是平台上分配器的效率,除非您能够对结果进行说明,否则会对结果进行着色.两个实现之间的15倍差异是如此之大,以至于完全可疑 - 这让我想知道你是如何获得这些数字的.
通常,如果您的队列很短,那么与其他实现相比,还有很大的改进空间.如果您可以编写自己的容器,可以编写循环缓冲容器或使用Boostcircular_buffer.循环缓冲器结合了deque类型操作的内存效率std::vector和CPU效率std::deque.有点让我希望它开始于STL.那好吧.
实际的开销量将随实施而变化.
| 归档时间: |
|
| 查看次数: |
4229 次 |
| 最近记录: |