在更新前比较(memcmp before memcpy),还是只更新,哪个性能更好?

标签 c performance memcpy paradigms memcmp

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

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

跟踪 MAC 地址和 ipv6 地址。

用于处理 IPv6 地址更改:
  • 我应该比较新旧值(memcmp),如果不同,则更新(memcpy)。
  • 或者,我只是更新它。

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

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

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

    最佳答案

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

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

    关于在更新前比较(memcmp before memcpy),还是只更新,哪个性能更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17461589/

    相关文章:

    c - 使用第二个参数作为目录复制文件

    c++ - memcpy 在尝试 ‘fast’ pimpl 期间未优化

    将 A1 转换为 R1C1 格式

    c - 如何在编译时检查 C 函数的有效输入?

    C 为什么 3 除以 2 在一个 int 中等于 0,而在另一个 int 中等于 1?

    c - 如何使用指针和数组在c中一个一个地反转单词

    performance - XPerf 中的硬故障是什么

    ios - 宽高比约束会降低性能吗?

    c - memcpy()段错误

    c++ - 考虑到缓存一致性的高性能应用程序的POD数学结构类的C++选择按值传递还是按引用传递