我有一个性能关键的内联函数。它基于参数生成一些数据。我希望编译器优化所有已知参数在编译时的调用中的数据生成。问题是,我无法强制编译器将优化后的数据从堆栈移到静态常量,因为标记数据为
当
static
会破坏参数不是编译时常量的情况。在堆栈上有常量数据会影响性能。是否有一种方法可以推断(可能使用模板/boost::enable_if),参数是编译时常量,并选择适当的数据生成实现?struct Data {
int d_[16];
};
inline Data fun(int param)
{ //param can sometimes be a compile-time constant
... //generate the data
Data res = {gen0, gen2, gen3, ..., gen15}; //put the data into result
return res;
}
当
param
不是编译时常量时,我们只需生成所有数据并返回。 当param
已知时,编译器可以优化数据生成。但是,它无法优化以下行,并生成大量代码,仅将res
成员设置为已知数据(数据嵌入到程序代码中)。我希望编译器创建一个静态常量,然后将其复制到返回对象中(这比执行嵌入数据的大量代码更快)。由于这是一个内联函数,即使复制也可能是不必要的。
免责声明
这个问题与如何根据编译时参数使用不同的内联函数重载?不同。 这是一个更通用的问题。