0

上下文(虽然不重要),在 netfilter 模块中,我们使用如下结构:

struct data {
    char mac[ETH_ALEN];
    char in6_addr addr;
};

跟踪 MAC 地址和 ipv6 地址。

用于处理 IPv6 地址更改:

  1. 我应该比较新旧值(memcmp),如果不同,则更新(memcpy)。
  2. 或者,我只是更新它。

两者都是有效的行为,因此性能是这里的主要关注点。

我发现了一个类似的问题:https ://jira.mongodb.org/browse/SERVER-66

他们似乎选择了“刚刚更新”的方式。

4

1 回答 1

1

最好的办法是对其进行基准测试,看看是否有任何合理的差异,假设不同地址的分布与你得到的相似(也许你应该使用一些真实数据)。

我唯一能想到的是,如果你跳过一个分支选择(如果你避免了,你就会这样做if (!memmcmp(..))),那么你就会跳过分支预测器失败的机会。

于 2013-07-04T03:56:09.937 回答