gpt4 book ai didi

c++ - 结构作为函数的参数 : more efficient to copy or dereference?

转载 作者:行者123 更新时间:2023-11-28 07:42:01 24 4
gpt4 key购买 nike

我目前正在为 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com