我目前正在为 C 开发一个简单的克隆检测器,用 C++ 编写,并且不断地问自己关于效率和如何优化 C++ 代码的问题。
我的一个问题是关于如何有效地传递结构。如果给出类似于以下内容的结构:
typedef struct {
unsigned int a;
void *b;
} my_struct;
以及一个对其 my_struct 参数执行大量操作(而非赋值)的函数。在 AST 遍历中为每个节点调用这个函数(所以很多......),并且根据一些初步阅读,我的理解是传递结构的实例(非指针)会导致它的副本为被调用函数制作。
因此,将结构作为指针传递然后取消引用是否更有效?
void foo(my_struct *s) {
// then dereference s->a...
基本上:复制速度与取消引用速度是我的问题。
我认为,由于内存消耗,将结构作为指针传递会更聪明,但我不知道有关速度的任何副作用。