根据gcc博士的说法,记忆不是GCC的固有功能。如果你想加快gcc领导下的glibc的记忆,你需要使用文档中定义的较低层次的本质。然而,当在互联网上搜索时,似乎很多人都有一种印象,即memcmp是一个内置功能。是为某些编译器而不是为另一些编译器吗?
发布于 2009-05-13 03:26:27
您的链接似乎是针对特定于x86架构的内置功能的,根据这 memcmp是由gcc实现的一个独立于体系结构的内置功能。
编辑:
使用Cygwin版本3.3.1为i686,-O2编译以下代码:
#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"):
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 发布于 2011-06-13 18:15:59
注意,repz例程可能不会比glibc的memcmp更快。实际上,在我的测试中,它从来不会更快,即使只是比较几个字节。
请参阅bug.cgi?id=43052
发布于 2017-05-11 20:59:34
现在到了2017年,GCC和Clang似乎对1、2、4、8等大小的缓冲区进行了一些优化,例如3、5和8的倍数。
https://stackoverflow.com/questions/855895
复制相似问题