值和指针之间的分配差异?

dra*_*ore -2 c++

当我执行以下操作时,我看到紧密循环中的巨大性能差异:

MyObject foo = bar.GetObject();
Run Code Online (Sandbox Code Playgroud)

VS

MyObject* foo = bar.GetObjectPtr();
Run Code Online (Sandbox Code Playgroud)

类函数的具体细节是:

class MyClass
{
  MyObject someobject;
  MyObject& GetObject() { return someobject; }
  MyObject* GetObjectPtr() { return &someobject; }
} bar;
Run Code Online (Sandbox Code Playgroud)

第一行中的赋值比第二行慢得多.有人可以解释发生了什么吗?这是否与默认的复制分配有关?

Pup*_*ppy 5

特别,

  1. 指针和引用在生成的机器代码中是相同的,除了编译器可以在某些情况下使用引用进行更好的优化,这要归功于较少的混叠乐趣.
  2. 您几乎肯定没有任何表明此行存在问题的分析数据.实际上,该变量可能甚至不存在于生成的机器代码中并且可以直接访问.这意味着试图确定其性能是所有相关人员的巨大浪费时间.
  3. 您的微基准代码在执行中存在严重缺陷.即使是非优化编译器也会为这两行产生相同的结果.如果您已发布基准代码,我可能会更具体.

发布的代码中的真正问题是提出的大规模封装违规.