Rust 编译器可以像 C++ 编译器一样积极地重新排序语句吗?

问题描述 投票:0回答:1

我刚刚阅读了在 C++ 中执行语句顺序并了解到 C++ 编译器允许重新排序

using Clock = std::chrono::high_resolution_clock;

auto t1 = Clock::now(); // Statement 1
foo();                  // Statement 2
auto t2 = Clock::now(); // Statement 3

auto elapsedTime = t2 - t1;

进入

using Clock=std::chrono::high_resolution_clock;

foo();                  // Statement 2
auto t1 = Clock::now(); // Statement 1
auto t2 = Clock::now(); // Statement 3

auto elapsedTime = t2 - t1;

并且需要使用类似的东西

template <class T>
__attribute__((always_inline)) inline void DoNotOptimize(const T &value) {
  asm volatile("" : "+m"(const_cast<T &>(value)));
}

帮助确保订单。 Rust 编译器是否允许做同样的事情?如果不是,Rust 的哪些规则可以防止这种情况发生?如果是,解决方法是什么?

c++ rust compiler-optimization
1个回答
0
投票

是的,他们是被允许的。但有比使用内联汇编更简单的解决方法:

std::hint::black_box()
,它本质上填补了 C++ 代码中
DoNotOptimize()
的角色。

请注意,这不是保证,只是一个提示(一般来说很难提供这样的保证,而且我认为您的

DoNotOptimize()
也不能保证这一点)。

© www.soinside.com 2019 - 2024. All rights reserved.