- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在 Windows 中,是否可以将 __asm nop
换成 asm volatile("nop");
(在 GCC 编译器中使用)并产生相同的结果?
我读过 volatile()
(在 GCC 中)保证调用不会被优化掉。但是,它不会直接移植到 Windows,我很好奇它是否可以简单地删除或是否需要用类似的结构替换。
最佳答案
__asm
关键字在 MSVC 中的实现非常简单。它始终发出未更改的机器代码,并且优化器不会触及它。它也不对 __asm 之后的机器状态做出任何假设,这具有击败其他优化的诀窍。
所以,不,不需要任何类似于 volatile()
的东西,它不会消失。 Plain __asm { nop }
将始终毫发无损地生存下来,相当于 GCC 程序集。
请记住,内联汇编不是一个好的长期策略,对它的支持已在 x64 编译器中完全删除,并且不太可能再回来。您将不得不回退到使用汇编编写并使用 ml64.exe 编译的内部函数或链接代码。这确实击败了 NOP 注入(inject),但是优化器已经很好地处理了代码对齐,不需要帮助。这也是您可能根本不应该这样做的原因。
关于c - `__asm nop` 是 Windows 等同于 `asm volatile("nop");` 来自 GCC 编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25878898/
判断这2个相似的Uris实际上相同的标准方法是什么? var a = new Uri("http://sample.com/sample/"); var b = new Uri("http://sam
这个问题在这里已经有了答案: Why does "true" == true show false in JavaScript? (5 个答案) 关闭 5 年前。 可能我很困惑,但我无法理解这个愚蠢
我是一名优秀的程序员,十分优秀!