我正在创建一个矩阵库,其中包含一堆像这样的函数(它实际上很长):
void matx_multiply(int x, float mat1[], float mat2[], float result[])
{
int row,col,k;
for (row=0; row<x; row++) {
for(col=0; col<x; col++){
result[row + col*x]=0.0f;
for (k=0; k<x; k++)
{
result[row + col*x]+=mat1[row + k*x]*mat2[k + col*x];
}
}
}
}
首先,我想知道如果在程序中使用〜{5次(通常是循环),将inline
函数更改为x
是否更好在编译时。
我觉得它inline
更好,所以编译器可以在编译时决定是否要在代码中扩展它(取决于优化参数)。此外,如果循环知道x
,编译器可能会很好地优化循环(例如,如果x = 2,它可能决定展开循环)
更重要的是,我想添加一组功能:
#define mat2_multiply(m1,m2,res) matx_multiply(2,m1,m2,res)
#define mat3_multiply(m1,m2,res) matx_multiply(3,m1,m2,res)
...
或
static inline void mat2_multiply(float mat1[static 2],
float mat2[static 2],
float result[static 2])
{
matx_multiply(2,mat1,mat2,result);
}
...
或创建一个函数(但它创建一个函数调用什么都没有)
你会做什么,你想要一个矩阵库做什么?
我希望我的库能够快速(对于OpenGL应用程序),相当小且易于使用。
答案 0 :(得分:0)
使用inline
关键字。如果使用预处理器开发类似函数的宏,有几个缺点: