我已经将部分代码从非常简单的 c 数组改写为使用(或尝试使用)对象,以便在其中获得更多结构。我现在使用由单例定义的全局数组,而不是通过函数头传递数组。您可以在下面的代码中看到一个函数示例:
它是:
void calcdiv(int nx,int ny,float **u,float **v,
float **divu,float dx,float dy,float **p,
float dt,float rho, float **bp,float **lapp)
{
int i,j;
for (i=2;i<=nx-3;++i){
for (j=2;j<=ny-3;++j){
divu[i][j] = (u[i+1][j]-u[i-1][j])*facu +
(v[i][j+1]-v[i][j-1])*facv;
}
}
...
现在它是:
void calcdiv()
{
int i,j;
SingletonClass* gV = [SingletonClass sharedInstance];
for (i=2;i<=gV.nx-3;++i){
for (j=2;j<=gV.ny-3;++j){
gV.divu[i][j] = (gV.u[i+1][j]-gV.u[i-1][j])*facu +
(gV.v[i][j+1]-gV.v[i][j-1])*facv;
}
}
...
在重组之前,我一直在使用上面给出的函数调用。这意味着直接将指针传递给数组。现在我通过单例调用“SingletonClass* gV ...”访问数组。它工作得很好,除了它比以前慢得多。分析器告诉我,我的程序在 objc_msgSend 上花费了 41% 的时间,这是我以前没有过的。
通过阅读帖子,我了解到这可能会在经常调用 msgSend 时发生。这很可能是这里的情况,因为我的程序需要大量的数字运算才能使用 OpenGL 显示动画流。
这引出了我的问题:你有什么建议?我应该继续使用我的简单 C 实现还是有一种相当简单的方法来加速目标 C 版本?请耐心等待,因为我是 Objective C 编程的新手。
非常感谢任何提示和建议!提前致谢。