优化特定功能?

use*_*459 8 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));
    }

};
Run Code Online (Sandbox Code Playgroud)

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

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

CS *_*Pei 8

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

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

#pragma GCC optimize ("-O3")
Run Code Online (Sandbox Code Playgroud)

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