小编Twe*_*lix的帖子

为循环中多次调用的函数返回值预分配内存的正确方法是什么?

我试图改善我的C ++代码并试图改善我的编码风格。我想实现一个循环中多次调用的函数。

Class C {
    double alpha = 0.1;
    std::valarray<double> f(std::valarray<double> const & arr) //called many times in a loop
    {
        return arr * alpha;
    }
}
Run Code Online (Sandbox Code Playgroud)

传入的数组非常大,每次f返回时,它都会为返回值分配一个全新的数组,这确实减慢了我的代码的速度。我试图通过在执行期间一旦知道数组的大小就在它所属的类中为其预先分配一个返回值来实现修复。

Class C {
    double alpha = 0.1;
    std::valarray<double> f_retval;

    void f(std::valarray<double> const & arr) //called many times in a loop
    {
        f_retval = arr * alpha;
    }

    void allocateMembers(int Nx) //known size of the arrays used in the class 
    {
        f_retval = std::valarray<double>(Nx);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是必须有更好的方法来做到这一点。有什么建议么?

c++ optimization memory-management c++17

5
推荐指数
1
解决办法
168
查看次数

标签 统计

c++ ×1

c++17 ×1

memory-management ×1

optimization ×1