优化特定功能?

时间:2014-08-11 19:25:13

标签: c++

我想知道是否有一种特定的方法来优化某些功能(在大多数情况下)不需要调试。

举个例子,假设我有一个3x3矩阵实现。

class Mat3
{
    Vec3 columns[3];

    Vec3 rowAt(int i) const { return Vec3(columns[0][i], columns[1][i], columns[2][i]); }

    Vec3 operator * (const Vec3& v)
    {
        return Vec3(dot(rowAt(0), v),
                    dot(rowAt(1), v),
                    dot(rowAt(2), v));
    }

    // versus, which is more efficient in unoptimized compiler generation
    // but a lot less readable and duplicate code

    Vec3 operator * (const Vec3& v)
    {
        return Vec3(columns[0][0].x * v.x + columns[1][0].y * v.y + columns[2][0].z * v.z),
                    columns[0][1].x * v.x + columns[1][1].y * v.y + columns[2][1].z * v.z),
                    columns[0][2].x * v.x + columns[1][2].y * v.y + columns[2][2].z * v.z));
    }

};

优化后,rowAt()创建的副本将被优化。但是,当运行非优化代码时,这将创建Vec3的额外副本,这将产生较慢的代码。这类函数不需要经常调试(通常一旦实现等)。

有没有办法让编译器只优化特定的功能?还有一些其他用例(在模板和仿函数的情况下),这将是有用的。

1 个答案:

答案 0 :(得分:8)

您可以在不同的.cpp文件中单独编译功能。对于每个.cpp文件,您可以使用不同的参数编译它们,例如g++ -o -O3 your_need_optimized.cpp。然后,您可以将它们链接在一起以生成可执行文件。

或者你可以这样做,因为Drew McGowen指出你可以把

#pragma GCC optimize ("-O3")

在您要优化的函数之前的cpp文件中。