gpt4 book ai didi

c++ - 快速比较字符数组?

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

我目前在一个代码库中工作,其中 IPv4 地址表示为指向 u_int8 的指针。相等运算符是这样实现的:

bool Ipv4Address::operator==(const u_int8 * inAddress) const
{
return (*(u_int32*) this->myBytes == *(u_int32*) inAddress);
}

这可能是禁食的解决方案,但它会导致 GCC 编译器警告:

ipv4address.cpp:65: warning: dereferencing type-punned pointer will break strict-aliasing rules

如何在不违反严格别名规则且不损失性能点的情况下正确重写比较?

我考虑过使用 memcmp 或这个宏:

#define IS_EQUAL(a, b) \
(a[0] == b[0] && a[1] == b[1] && a[2] == b[2] && a[3] == b[3])

我认为宏是最快的解决方案。

你有什么建议?

更新
我刚刚看了文章Squeezing performance out of memcmp usage这解释了编译器(Visual Studio,但也许还有 GCC)如何优化 !memcmp(..) 调用。

最佳答案

我会选择 memcmp()

  1. 更便携
  2. 我通常尽量不要比我的编译器/语言更聪明。您正在尝试比较内存内容,并且(也取决于编译器选项)memcmp() 的实现应该是最有效的方法。

还认为如果你的编译器不内联 memcmp() 你将遭受函数上下文切换

你确定你需要那么努力地优化吗?您是否已经检查过您的程序大部分时间都在执行此类操作?

关于c++ - 快速比较字符数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2929925/

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