我有以下循环,我在 ARM 处理器上运行。
// pin here is pointer to some part of an array
for (i = 0; i < v->numelements; i++)
{
pe = pptr[i];
peParent = pe->parent;
SPHERE *ps = (SPHERE *)(pe->data);
pin[0] = FLOAT2FIX(ps->rad2);
pin[1] = *peParent->procs->pe_intersect == &SphPeIntersect;
fixifyVector( &pin[2], ps->center ); // Is an inline function
pin = pin + 5;
}
通过循环的缓慢性能,我可以判断编译器无法展开这个循环,因为当我手动展开时,它变得非常快。我认为编译器被pin
指针弄糊涂了。我们可以在这里使用restrict
关键字来帮助编译器,还是restrict
只为函数参数保留?一般来说,我们如何告诉编译器展开它而不用担心pin
指针。