Valarray и пользовательский распределитель

Зачем std::valarray не поддерживает пользовательские распределители? Как спроектировано управление памятью? Есть newна основе или mallocраспределитель используется?
Все остальные контейнеры обычно предоставляют возможность указать собственный распределитель. Сказать, std::vector в libstdc++ иметь соответствующий параметр шаблона Allocator и я могу указать __gnu_cxx::__mt_alloc в качестве распределителя.

5

Решение

Почему std :: valarray не поддерживает пользовательские распределители?

Так как std::valarray не является динамическим массивом std::vector). Это своего рода оптимизированная версия вектора для числовых вычислений, разработанная с учетом SIMD и подобных оптимизаций.

От документация:

Классы std :: valarray и helper определены как свободные от определенных
формы псевдонимов, что позволяет выполнять операции над этими классами
оптимизировано аналогично эффекту ограничения ключевых слов в C
язык программирования. Кроме того, функции и операторы, которые принимают
В качестве аргументов valarray разрешено возвращать прокси-объекты
возможно, чтобы компилятор оптимизировал выражение […], избегая временных или многократных проходов.

Как видите, это не простой динамический массив. Это динамический массив, предназначенный для хранения числовых значений и выполнения над ними векторизованных вычислений посредством многих оптимизаций.

0

Другие решения


По вопросам рекламы [email protected]