] std :: deque Использование памяти - Visual C ++ и сравнение с другими

Продолжение до Что происходит с накладными расходами памяти std :: deque?

Visual C ++ управляет блоками 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 . Частные байты Process Explorer уменьшились с 181 МБ до 113 МБ после 100 м push_back (const char & mychar) вызовов).

  • Кто-нибудь может подтвердить значения в Изменив 16 в первой строке на 128, я смог резко уменьшить занимаемую площадь, необходимую для большого deque . Частные байты Process Explorer уменьшились с 181 МБ до 113 МБ после 100 м push_back (const char & mychar) вызовов).
    • Кто-нибудь может подтвердить значения в Изменив 16 в первой строке на 128, я смог резко уменьшить занимаемую площадь, необходимую для большого deque . Частные байты Process Explorer уменьшились с 181 МБ до 113 МБ после 100 м push_back (const char & mychar) вызовов).
      • Кто-нибудь может подтвердить значения в что #define ?
      • Как другие компиляторы обрабатывают блок deque калибровка?
      • Каким будет их след (32-битная операция) для простых тест 100 м push_back вызовов на deque ?
      • Допускает ли STL переопределение этого размера блока на во время компиляции, без изменения код?

18
задан Community 23 May 2017 в 12:01
поделиться