为什么memcmp在仿生学中是这样的?

时间:2012-06-20 05:37:10

标签: bionic

我发现bionic中的memcmp.c是这样的:

 30 int memcmp(const void *s1, const void *s2, size_t n)
 31 {
 32     const unsigned char*  p1   = s1;
 33     const unsigned char*  end1 = p1 + n;
 34     const unsigned char*  p2   = s2;
 35     int                   d = 0;
 36 
 37     for (;;) {
 38         if (d || p1 >= end1) break;
 39         d = (int)*p1++ - (int)*p2++;
 40 
 41         if (d || p1 >= end1) break;
 42         d = (int)*p1++ - (int)*p2++;
 43 
 44         if (d || p1 >= end1) break;
 45         d = (int)*p1++ - (int)*p2++;
 46 
 47         if (d || p1 >= end1) break;
 48         d = (int)*p1++ - (int)*p2++;
 49     }
 50     return d;
 51 }

在for循环中,相同的逻辑重复4次,为什么?可以不重复吗?

THX, 维克多

1 个答案:

答案 0 :(得分:2)

这是一个手动循环展开。它可以只做一次,或者甚至用常规循环代替无限循环,也可以完成4次以上。有人认为这可以让编译器更好地优化生成的代码。

有关详情,请查看http://en.wikipedia.org/wiki/Loop_unrolling