首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么memcmp在仿生学中是这样的?

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

Stack Overflow用户
提问于 2012-06-20 13:37:10
回答 1查看 172关注 0票数 1

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

代码语言:javascript
复制
 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次,为什么?能不能不重复?

谢谢,维克多

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-20 13:37:48

这是一个手动循环展开。它可以只做一次,甚至用一个规则的循环来代替无限的循环,它也可以做超过4次。有人认为这给了编译器更好的机会来优化生成的代码。

有关更多信息,请查看http://en.wikipedia.org/wiki/Loop_unrolling

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11113404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档