在gcc中,我们可以使用asm volatile("":::"memory");

但我在asm文档中找不到类似"内存"的选项.

有什么办法吗?

推荐答案

在Rust中,默认情况是内存崩溃.你应该用options(nomem)来 Select 退出.

For example:

pub unsafe fn no_nomem() {
    std::arch::asm!("");
}

pub unsafe fn nomem() {
    std::arch::asm!("", options(nomem));
}

LLVM IR:

define void @_ZN7example8no_nomem17h95b023e6c43118daE() unnamed_addr #0 !dbg !5 {
  call void asm sideeffect alignstack inteldialect "", "~{dirflag},~{fpsr},~{flags},~{memory}"(), !dbg !10, !srcloc !11
  br label %bb1, !dbg !10

bb1:                                              ; preds = %start
  ret void, !dbg !12
}

define void @_ZN7example5nomem17hc75cf2d808290004E() unnamed_addr #0 !dbg !13 {
  call void asm sideeffect alignstack inteldialect "", "~{dirflag},~{fpsr},~{flags}"() #1, !dbg !14, !srcloc !15
  br label %bb1, !dbg !14

bb1:                                              ; preds = %start
  ret void, !dbg !16
}

没有nomem的函数发出~{memory}势垒.

Rust相关问答推荐

在UdpSocket上使用sendto时的隐式套接字绑定

字段类型为Boxed的 struct 的生存期必须超过static

更合理的方法来设计样条线函数器?

根据填充系数以相对大小在给定空间中布局项目

装箱特性如何影响传递给它的参数的生命周期 ?(举一个非常具体的例子)

为什么我需要 to_string 函数的参考?

使用 serde::from_value 反序列化为泛型类型

Rust FFI 和 CUDA C 性能差异

Rust:`sort_by` 多个条件,冗长的模式匹配

具有在宏扩展中指定的生命周期的枚举变体数据类型

rust tokio::spawn 在 mutexguard 之后等待

为什么可以在迭代器引用上调用 into_iter?

Rust 引用元组和引用元组

强制特征仅在 Rust 中的给定类型大小上实现

是否可以预测堆栈溢出?

你能告诉我如何在 Rust 中使用定时器吗?

具有生命周期和以后引用的可变方法

如何用另一个变量向量置换 rust simd 向量?

为什么 u64::trailing_zeros() 在无分支工作时生成分支程序集?

在派生宏中使用枚举字段