Зачем std::valarray
не поддерживает пользовательские распределители? Как спроектировано управление памятью? Есть new
на основе или malloc
распределитель используется?
Все остальные контейнеры обычно предоставляют возможность указать собственный распределитель. Сказать, std::vector
в libstdc++
иметь соответствующий параметр шаблона Allocator
и я могу указать __gnu_cxx::__mt_alloc
в качестве распределителя.
Почему std :: valarray не поддерживает пользовательские распределители?
Так как std::valarray
не является динамическим массивом std::vector
). Это своего рода оптимизированная версия вектора для числовых вычислений, разработанная с учетом SIMD и подобных оптимизаций.
От документация:
Классы std :: valarray и helper определены как свободные от определенных
формы псевдонимов, что позволяет выполнять операции над этими классами
оптимизировано аналогично эффекту ограничения ключевых слов в C
язык программирования. Кроме того, функции и операторы, которые принимают
В качестве аргументов valarray разрешено возвращать прокси-объекты
возможно, чтобы компилятор оптимизировал выражение […], избегая временных или многократных проходов.
Как видите, это не простой динамический массив. Это динамический массив, предназначенный для хранения числовых значений и выполнения над ними векторизованных вычислений посредством многих оптимизаций.