首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内在模模

内在模模
EN

Stack Overflow用户
提问于 2009-05-13 03:18:12
回答 3查看 7.7K关注 0票数 6

根据gcc博士的说法,记忆不是GCC的固有功能。如果你想加快gcc领导下的glibc的记忆,你需要使用文档中定义的较低层次的本质。然而,当在互联网上搜索时,似乎很多人都有一种印象,即memcmp是一个内置功能。是为某些编译器而不是为另一些编译器吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-05-13 03:26:27

您的链接似乎是针对特定于x86架构的内置功能的,根据 memcmp是由gcc实现的一个独立于体系结构的内置功能。

编辑:

使用Cygwin版本3.3.1为i686,-O2编译以下代码:

代码语言:javascript
复制
#include <stdlib.h>

struct foo {
    int a;
    int b;
} ;

int func(struct foo *x, struct foo *y)
{
    return memcmp(x, y, sizeof (struct foo));
}

生成以下输出(请注意,对memcmp()的调用被转换为8字节的"repz cmpsb"):

代码语言:javascript
复制
   0:   55                      push   %ebp
   1:   b9 08 00 00 00          mov    $0x8,%ecx
   6:   89 e5                   mov    %esp,%ebp
   8:   fc                      cld    
   9:   83 ec 08                sub    $0x8,%esp
   c:   89 34 24                mov    %esi,(%esp)
   f:   8b 75 08                mov    0x8(%ebp),%esi
  12:   89 7c 24 04             mov    %edi,0x4(%esp)
  16:   8b 7d 0c                mov    0xc(%ebp),%edi
  19:   f3 a6                   repz cmpsb %es:(%edi),%ds:(%esi)
  1b:   0f 92 c0                setb   %al
  1e:   8b 34 24                mov    (%esp),%esi
  21:   8b 7c 24 04             mov    0x4(%esp),%edi
  25:   0f 97 c2                seta   %dl
  28:   89 ec                   mov    %ebp,%esp
  2a:   5d                      pop    %ebp
  2b:   28 c2                   sub    %al,%dl
  2d:   0f be c2                movsbl %dl,%eax
  30:   c3                      ret    
  31:   90                      nop    
票数 5
EN

Stack Overflow用户

发布于 2011-06-13 18:15:59

注意,repz例程可能不会比glibc的memcmp更快。实际上,在我的测试中,它从来不会更快,即使只是比较几个字节。

请参阅bug.cgi?id=43052

票数 9
EN

Stack Overflow用户

发布于 2017-05-11 20:59:34

现在到了2017年,GCC和Clang似乎对1、2、4、8等大小的缓冲区进行了一些优化,例如3、5和8的倍数。

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

https://stackoverflow.com/questions/855895

复制
相关文章

相似问题

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