我发现in Linux kernel, the clflush function被实现为

asm volatile("clflush %0" : "+m" (*(volatile char __force *)__p));

我不太明白为什么这里使用+m?
据我所知,它不应该作为
asm volatile ("clflush (%0)" :: "r"(p));

最佳答案

这两种指令都指向同一个地址,因此都有效。但是,通过使用+m作为约束,它确保对代码所做的任何优化(因为函数是内联的)不会假定保存指针__p中存储的数据。换句话说,它可以防止无效的优化。

关于linux - 为什么clflush需要+ m常数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36226627/

10-11 18:33