std::deque
хранит элементы в "корзинах" (массивах) фиксированного размера. Различные компиляторы используют разные размеры ковша:
- MSVC: 16 байт или размер элемента, если он больше
- GCC: 512 байт или размер элемента, если он больше
- Clang:
element_size < 256? 4096: element_size * 16
element_size < 256? 4096: element_size * 16
Для MSVC (особенно) и GCC, если размер элемента deque больше, чем размер, std::deque
жестко, std::deque
превращается в свернутый std::list
с потерями производительности в большинстве случаев.
Clang работает лучше, на мой взгляд, независимо от того, какой размер элемента deque, ведро будет составлять не менее 16 элементов. Хотя минимальный размер сегмента 4096 байт может быть неоптимальным в некоторых случаях для небольших элементов.
Почему в std::deque
нет дополнительного параметра шаблона для размера корзины со значением по умолчанию, которое, по мнению поставщика, является разумным? Это не нарушит обратную совместимость, но позволит оптимизировать производительность.