覚書。引用 ChatGPT
話のポイントは何億回も呼ばれる自作配列クラスのoperatorの話です。
質問1.なぜ const size_t&
より size_t
のほうが速いのか?
あなたの直感「参照のほうがコピーしないから速いのでは?」
→ 普通の型(例えば double
やクラス)ならそれ正解です!
でも、size_t はただの unsigned int みたいなもので
「たったの8バイト」です。
ポイント
-
参照は内部的に「ポインタ」です。
-
つまり、
const size_t& r
は「rのアドレス」を持ちます。 -
でも
size_t r
なら、そのまま値(レジスタ)に置ける。
現代CPUでは、
-
「8バイトの値を渡す」より
-
「ポインタを渡して間接参照する」ほうが
➔ 微妙に遅くなります。(レイテンシが増える)
つまり、
✅ 小さい型(int、size_t、ポインタ)は「参照渡し」しない方が速い
✅ でかい型(std::string、構造体)は「const参照渡し」のほうが速い
これが理由です!