在更新之前比较(memcmp之前的memcmp),或者只是更新,哪个性能更好?

时间:2013-07-04 03:51:41

标签: c performance memcpy paradigms memcmp

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

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

跟踪MAC地址和ipv6地址。

用于处理ipv6地址更改:

  1. 我应该比较新旧值(memcmp),如果不同,则更新(memcpy)。
  2. 或者,我只是更新它。
  3. 两者都是有效的行为,因此性能是这里的主要关注点。

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

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

1 个答案:

答案 0 :(得分:1)

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

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