0

コンテキスト (重要ではありませんが)、netfilter モジュールでは、次のような構造体を使用します。

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

MAC アドレスと ipv6 アドレスを追跡します。

IPv6 アドレスの変更を処理する場合:

  1. 新旧の値(memcmp)を比較し、異なる場合は更新(memcpy)する必要があります。
  2. または、更新するだけです。

どちらも有効な動作であるため、ここではパフォーマンスが主な関心事です。

同様の質問が 1 つ見つかりました: https://jira.mongodb.org/browse/SERVER-66

彼らは「ただ更新する」方法を選択しているようです。

4

1 に答える 1

1

最良の方法は、取得したアドレスと同様の異なるアドレスの分布を想定して、ベンチマークを行い、合理的な違いがあるかどうかを確認することです (実際のデータを使用する必要があるかもしれません)。

私が考えることができる唯一のことは、分岐の選択をスキップすると (そして、を回避する場合はif (!memmcmp(..))スキップする場合)、分岐予測子で失敗する可能性をスキップするということです。

于 2013-07-04T03:56:09.937 に答える