假设源架构和目标架构不同,模拟器如何有效地转换内存屏障?我知道通常现代仿真器将使用 JIT 将源ISA转换为目标 ISA,但是要知道哪些代码可以被多个程序计数器访问,哪些似乎不是很棘手,然后知道哪些指令可以安全地重新排序(由于 ISA 差异,JIT 可能需要生成一些有效的东西)并且这似乎不是非常棘手。
您甚至不能保证在指令流中找到显式的内存屏障,例如 x86 上的许多人依赖对齐的字写入是原子的。模拟器是否保守地假设每个对齐的单词写入都不能重新排序?这似乎是一个潜在的巨大开销,这让我想知道是否有任何已知的分析来解决这类问题。