我想知道是否有一种特定的方法来优化只有一些功能(在大多数情况下)不应该被调试.
举个例子,假设我有一个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这将产生更慢的代码.这种功能不需要经常调试(通常一旦实现等).
有没有办法让编译器只优化特定的功能?还有一些其他用例(在模板和仿函数的情况下),这将是有用的.
您可以在不同的.cpp文件中单独编译功能.对于每个.cpp文件,您可以使用不同的参数编译它们,例如,g++ -o -O3 your_need_optimized.cpp.然后,您可以将它们链接在一起以生成可执行文件.
或者你可以这样做,因为Drew McGowen指出你可以放
#pragma GCC optimize ("-O3")
Run Code Online (Sandbox Code Playgroud)
在您想要优化的函数之前的cpp文件中.