gpt4 book ai didi

linux - 为什么clflush需要+m常量

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:11:32 25 4
gpt4 key购买 nike

我发现 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/

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