J'ai trouvé que in Linux kernel, the clflush
function est mis en œuvre commePourquoi ne besoins clflush + m constant
asm volatile("clflush %0" : "+m" (*(volatile char __force *)__p));
Je ne comprends pas pourquoi + m est utilisé ici?
Dans ma compréhension, il ne devrait pas être mis en œuvre comme
asm volatile ("clflush (%0)" :: "r"(p));
Si quoi que ce soit, la façon évidente de l'écrire serait 'asm volatile (" clflush% 0 "::" m "(* (char *) p))'. Il n'est pas nécessaire de forcer le compilateur à utiliser un simple mode d'adressage '(% reg)' sans déplacement ni index. ** La partie qui est surprenante et intéressante est le '+ ', pas le' m' **. –