gpt4 book ai didi

c++ - 实现 memcmp

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:05:58 25 4
gpt4 key购买 nike

下面是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));
}

它基本上是逐字节比较。

我的问题分为两部分:

  1. 有什么理由在 count < sizeof(int) 之前不通过 int 比较将其更改为 int? ,然后逐字节比较剩余的内容?
  2. 如果我要执行 1,是否存在任何潜在/明显的问题?

注意:我根本没有使用CRT,所以无论如何我都必须实现这个功能。我只是在寻找有关如何正确实现它的建议。

最佳答案

如果您愿意,您可以将其作为 int-by-int 比较或更广泛的数据类型来完成。

您必须(至少)注意两件事:开始 和结束处的悬垂,以及两个区域之间的对齐方式是否不同。

如果您访问值时不遵循它们的对齐规则,某些处理器运行速度会变慢(如果您尝试这样做,有些处理器甚至会崩溃)。

因此您的代码可能会进行 char 比较,直到 int 对齐区域,然后是 int 比较,然后是 char 再次比较,但是两个区域的对齐方式可能很重要。

额外的代码复杂性是否值得您将获得的任何节省取决于您无法控制的许多因素。一种可能的方法是检测两个区域完全对齐的理想情况并快速检测,否则只需一个字符一个字符地检测。

关于c++ - 实现 memcmp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5017659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com