我目前正在为 C 语言开发一个简单的克隆检测器,用 C++ 编写,并且不断地问自己关于效率和如何优化 C++ 代码的问题。
我有一个问题是关于如何有效地传递结构。如果给出类似于以下内容的结构:
typedef struct {
unsigned int a;
void *b;
} my_struct;
和一个对其 my_struct 参数执行大量操作(不是赋值)的函数。在 AST 遍历中为每个节点调用此函数(非常多......)并且根据一些初步阅读,我的理解是传递结构(非指针)的实例会导致它的拷贝到为被调用的函数制作。
因此,将结构作为指针传递然后解引用是否更有效?
void foo(my_struct *s) {
// then dereference s->a...
基本上:复制速度与取消引用速度是我的问题。
我假设,由于内存消耗,将结构作为指针传递会更聪明,但我不知道关于速度的任何副作用。
最佳答案
视情况而定。
在您的例子中,您的结构并不比指针大多少;将整个结构作为函数参数传递可能不会比传递指针慢很多。
在您的函数内,通过指针访问结构成员可能比访问本地结构对象的成员慢。如果是这样,那么如果您在函数内部做很多事情,那么直接传递结构可能会给您整体更快的代码。但这取决于 CPU 的能力和生成的代码;可能成员访问无论是否通过指针,速度都是一样的。
回答这个问题的唯一方法是衡量你自己代码的性能。您得到的任何答案都将仅适用于您当前的情况,并且可能会在其他目标系统或不同版本的编译器上发生变化。
确保您告诉编译器优化您的代码。如果您不这样做,那么衡量绩效就没有多大意义。
关于c++ - 结构作为函数的参数 : more efficient to copy or dereference?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15644362/