Следуйте за Что происходит в игре с издержками памяти std:: deque?
Visual С++ управляет блоками deque
в соответствии с типом элемента контейнера, используя это:
#define _DEQUESIZ (sizeof (value_type) <= 1 ? 16 \
: sizeof (value_type) <= 2 ? 8 \
: sizeof (value_type) <= 4 ? 4 \
: sizeof (value_type) <= 8 ? 2 \
: 1) /* elements per block (a power of 2) */
Это приводит к очень большому объему памяти для небольших элементов. Изменив 16 в первой строке на 128, я смог резко уменьшить площадь, требуемую для большого deque<char>
. Частные байты Process Explorer упали с 181 МБ → 113 МБ после вызовов 100 м push_back(const char& mychar)
).
- Кто-нибудь может оправдать значения в
что
#define
? - Как другие
компиляторы обрабатывают блок
deque
проклейки? - Что будет их след
(32-разрядная операция) для простого
испытание 100 м
push_back
вызововdeque<char>
? - Разрешает ли STL
переопределение этого размера блока в
время компиляции, без изменения
<deque>
код?