【问题标题】:Valarray and custom allocatorValarray 和自定义分配器
【发布时间】:2014-08-12 15:17:55
【问题描述】:
为什么std::valarray 不支持自定义分配器?它的内存管理是如何设计的?是否使用了基于new 或malloc 的分配器?
所有其他容器通常提供指定自定义分配器的可能性。比如libstdc++中的std::vector有对应的模板参数Allocator,我可以指定__gnu_cxx::__mt_alloc作为分配器。
【问题讨论】:
标签:
c++
stl
containers
valarray
【解决方案1】:
为什么 std::valarray 不支持自定义分配器?
因为std::valarray 不是动态数组(如std::vector)。它是一种用于数值计算的优化向量版本,旨在依赖 SIMD 和类似的优化。
来自the documentation:
std::valarray 和 helper 类被定义为没有某些
形式的别名,从而允许对这些类进行操作
优化类似于C中关键字restrict的效果
编程语言。此外,函数和运算符采用
valarray 参数被允许返回代理对象来实现
编译器可以优化表达式 [...] 避免任何临时或多次传递。
如您所见,它不是一个简单的动态数组。它是一个动态数组,旨在通过许多优化来保存数值并对其进行矢量化计算。