【发布时间】:2011-06-28 09:47:49
【问题描述】:
以下是memcmp的微软CRT实现:
int memcmp(const void* buf1,
const void* buf2,
size_t count)
{
if(!count)
return(0);
while(--count && *(char*)buf1 == *(char*)buf2 ) {
buf1 = (char*)buf1 + 1;
buf2 = (char*)buf2 + 1;
}
return(*((unsigned char*)buf1) - *((unsigned char*)buf2));
}
它基本上是逐字节进行比较。
我的问题分为两部分:
- 是否有任何理由在
count < sizeof(int)之前不将其更改为 int by int 比较,然后对剩余的内容进行逐字节比较? - 如果我要执行 1,是否存在任何潜在/明显的问题?
注意:我根本没有使用 CRT,所以无论如何我都必须实现这个功能。我只是在寻找有关如何正确实施它的建议。
【问题讨论】:
-
这在大多数情况下并不完全正确。假设您使用优化进行编译,它将变成编译器内在函数,而不是调用 CRT 的实现。
-
添加在 C 标记中,因为这确实是一个 C 问题
-
优化时,需要考虑的一个问题是需要多大的数据量才能看到任何显着的改进? 有时执行函数的开销会占用更多时间比实际比较。
-
这真的是实现吗?我原以为他们使用的是 SIMD 指令 (SSE)。