提高蓄电池内存使用和效率

Boost accumulator memory usage and efficiency

本文关键字:效率 内存 蓄电池      更新时间:2023-10-16

我在c++中使用boost累加器从双精度向量中获取统计信息。每次我需要一个新的统计数据时,我调用一个自定义方法,通过创建累加器来获取它,用矢量值加载它,最后使用boost统计函数。

double Entity::min(void) {
    accumulator_set< double, features< tag::min > > acc;
    // Now load the vector into the accumulator.
    acc = std::for_each( samples.begin(), samples.end(), acc );
    // Specify namespace to avoid name clash of this min method
    this->_min =  boost::accumulators::min(acc);
    return this->_min;
}
// etc. more methods for StdDev, mean, max etc.

我的问题是:在不同的方法重复累加器的每个创建(加上)向量内存需求?我知道我可以写一个"getstatistics"方法来一次获得它们,但是我特别想知道累加器的创建和加载是否每次至少使用与原始向量相同的内存。

谢谢大家皮特

您正在使用的算法适用于samples集合,这是类Entity的属性。该集合是vector模板的实例。

std::for_each实例只作用于在构造时传递的集合的迭代器:samples.begin()samples.end()

标准迭代器专门设计用于抽象集合上的游标或指针的概念。它们不会以任何方式复制集合,因此在使用它们时不应该担心内存分配问题。

这里使用的特定accumulator_set也不会产生集合的任何副本。它只是访问迭代器,比较当前最小候选值和当前集合的指向值,并将两者的最佳值保留到下一次迭代。

就目前而言,您所使用的标准部件都不会重复集合。