std::deque
将元素存储在固定大小的“桶”(数组)中。不同的编译器使用不同的桶大小:
- MSVC:16 字节或元素大小(如果更大)
- GCC:512 字节或元素大小(如果更大)
- 铛:
element_size < 256 ? 4096 : element_size * 16
对于 MSVC(尤其是)和 GCC,如果双端队列元素大小大于硬编码大小,在大多数情况下std::deque
会变成一个复杂的性能损失。std::list
在我看来,Clang 做得更好,无论双端队列元素的大小如何,存储桶都至少有 16 个元素。尽管 4096 字节的最小桶大小在某些情况下对于小元素可能不是最佳的。
为什么没有std::deque
额外的存储桶大小模板参数,默认值是供应商认为合理的?这不会破坏向后兼容性,但会允许性能优化。