我正在创建一个多维向量(数学向量),我允许基本的数学运算+, - ,/,*,=。模板接受两个参数,一个是类型(int,float等),另一个是向量的大小。目前我正通过for循环应用这些操作。现在考虑编译时已知的大小,编译器是否会展开循环?如果没有,有没有办法展开它没有(或最小)的性能损失?编译器将展开此循环吗?
template <typename T, u32 size>
class Vector
{
public:
// Various functions for mathematical operations.
// The functions take in a Vector<T, size>.
// Example:
void add(const Vector<T, size>& vec)
{
for (u32 i = 0; i < size; ++i)
{
values[i] += vec[i];
}
}
private:
T values[size];
};
之前有人评论Profile then optimize
请注意,这是对我的3D图形引擎的基础,它必须要快。其次,我想知道为了教育自己。
不健全表露无疑,但如果你用优化编译和转储组装你几乎可以找到:) – Skurmedel 2011-05-26 16:18:17
即使它必须是真快,分析是一个非常宝贵的工具。事实上,这是你的朋友*特别是*如果必须非常快,因为它比猜测好得多。 (另外,答案可能在很大程度上取决于编译器,所使用的标志以及甚至更多)。 – delnan 2011-05-26 16:18:18
'如果不是,是否有一种方法可以展开而不会影响性能?“展开一个循环是为了提高性能......如果性能降低,你为什么要这样做? – Chad 2011-05-26 16:18:21