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

标签 c++ performance function parameters struct

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

相关文章:

c++ - 如何从我在 Code::Blocks 中打开的文件或项目中查看函数列表?

javascript - 如何制作一个返回数组中每个整数的阶乘的函数

javascript - "this"对象的奇怪值

c# - C# 中的 ArrayList 性能测试

java - 我应该避免使用静态变量吗

脚本文件中未定义 JQuery 函数

C++ 如何遍历结构列表并访问它们的属性

c++ - GUI 中的 Qt 即时对象互通

c++ - 先到先得程序 C++ 表格格式

performance - 如何衡量 AngularJS 应用程序摘要周期的性能?