gpt4 book ai didi

c - `__asm nop` 是 Windows 等同于 `asm volatile("nop");` 来自 GCC 编译器

转载 作者:太空宇宙 更新时间:2023-11-04 07:14:38 26 4
gpt4 key购买 nike

在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com