私は現在、C++ で書かれた C 用の単純なクローン検出器を開発しており、効率と C++ コードを最適化する方法について無限の質問を自問自答しています。
私が持っている 1 つの質問は、構造体を効率的に渡す方法に関するものです。以下のような構造体が与えられた場合:
typedef struct {
unsigned int a;
void *b;
} my_struct;
my_struct パラメーターに対して多数の操作 (割り当てではない) を実行する関数。この関数は、AST トラバーサルの各ノードに対して呼び出されます (非常に多く...)。いくつかの予備的な読み取りに基づいて、私が理解していることは、構造体 (非ポインター) のインスタンスを渡すと、そのコピーが呼び出された関数に対して作成されます。
したがって、構造体をポインターとして渡してから逆参照する方が効率的ですか?
void foo(my_struct *s) {
// then dereference s->a...
基本的に:コピーの速度と逆参照の速度が私の質問です。
メモリ消費のために、構造体をポインタとして渡す方が賢明だと思いますが、速度に関する副作用についてはわかりません。