gpt4 book ai didi

c++ - 使用 const double* const 作为模板参数 - 代码性能问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:01:39 26 4
gpt4 key购买 nike

我试图了解使用 const double* const 的幕后黑手作为模板。我有一些非常基本的计算,我想高效地执行,但我不知道 c++ 编译器是如何工作的(汇编代码是什么)。

这个想法是为一个函数创建一个模板,该函数将 3 个常量 double 作为模板参数,并将一个 double 作为实参。

constexpr double p1 = 1;
constexpr double p2 = 2;
constexpr double p3 = 3;

template <const double* const a,
const double* const b,
const double* const c>
inline double func(double value)
{
constexpr double d = *a - *b;
constexpr double e = *a - *c;
constexpr double ratio = d / e;
constexpr double remain = *c - *a * ratio;

return value * ratio + remain;
}

double func2(double c)
{
return func<&p1,&p2,&p3>(c);
}

我的问题是,如果对于每个 p1、p2、p3,func< p1,p2,p3 >(c)将编译为 c * < const value > + < const value >

或者编译器无法在编译时提取常量值,完整的函数将在运行时执行。

最佳答案

When looking at the compiled output您可以看到编译器将 func2 简化为乘法和加法两个常量。它甚至不再调用 func

但是,编译器完全有能力生成相同的代码,而无需处理非类型模板参数:

inline double func(
double const a,
double const b,
double const c,
double const value
) {
double const d = a - b;
double const e = a - c;
double const ratio = d / e;
double const remain = c - a * ratio;

return value * ratio + remain;
}

这会产生完全相同的输出。

关于c++ - 使用 const double* const 作为模板参数 - 代码性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57521003/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com