因为我读过的所有答案听起来都像是你可以在任何地方粘贴这段代码,并且神奇地你会得到相同或更快的代码
获得更快代码的唯一方法是该注释允许省略围栏。
因此,它可能有用的唯一情况是:
- 您的程序在重要的频繁执行的代码中使用原子加载操作的消费排序;
- “消费价值”不仅可以立即在本地使用,还可以传递给其他函数;
- 目标 CPU 为消费操作提供特定保证(与该操作之前的给定栅栏一样强,仅针对该操作);
- 编译器编写者认真对待他们的工作:他们设法将消耗值的高级语言转换为 CPU 级消耗,以从 CPU 保证中获益。
这是可能获得更快的代码的一系列必要条件。
(而 C++ 社区的最新趋势是放弃发明一种在所有情况下都安全的适当编译方案,并为用户提供一种完全不同的方式来指示编译器生成“消耗”值的代码,更明确、更天真的可翻译的 C++ 代码。)
一条评论说代码可以相同或更慢,但张贴者没有详细说明。
当然,您可以随意添加到程序上的那种注释通常不能使代码更高效!那太容易了,而且自相矛盾。
某些注释指定了对代码的约束,这是对编译器的承诺,并且您不能将其放在与代码中的保证不对应的任何地方(例如noexcept
在 C++ 中,restrict
在 C 中),否则它会中断以各种方式编写代码(函数中的异常会noexcept
停止程序,受限指针的别名会导致有趣的错误编译和不良行为(以前在这种情况下未定义行为);然后编译器可以使用它以特定方式优化代码.
或者该注释不会以任何方式约束代码,编译器不能指望任何东西,并且该注释不会创造任何更多的优化机会。
如果您在某些情况下获得更高效的代码而无需使用注释破坏程序,那么在其他情况下您可能会获得效率较低的代码。这在一般情况下是正确的,特别是对于消费语义,它对 C++ 结构的翻译施加了前面描述的约束。
我想使用 this 的适当位置是在作为指针或引用的任何函数返回或参数上,并将在调用线程中传递或返回
不,它可能有用的唯一一种情况是预期的调用函数可能会使用消耗内存顺序。