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

标签 c performance memcpy paradigms memcmp

上下文(虽然不重要),在 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

看来他们选择了“只更新”的方式。

最佳答案

最好的办法是对其进行基准测试,并通过假设不同地址的分布与您获得的地址类似(也许您应该使用一些真实数据)来查看是否存在任何合理的差异。

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

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

相关文章:

c - 文件中的字符数?

c - 如何在定义的位置附加一个字符

c++ - 如何使用预处理器定义向应用程序添加简单的调试

在 Linux mint 中从 C 程序创建临时文件

python - 列表中所有字符串的长度 : the fastest way

c - 如何获取 C 宏中声明的变量的地址?

c++ - 将 memcpy 数据直接发送到 union 而不是其特定成员之一是否安全?

c - 复制内存时出现问题

ios - XCode 性能测量

c++ - 有效地从文本文件中读取带有字符串索引的巨大二维数组(矩阵)