я обнаружил, что in Linux kernel, the clflush
function реализуется какПочему clflush потребности + м постоянной
asm volatile("clflush %0" : "+m" (*(volatile char __force *)__p));
Я не совсем понимаю, почему + м используется здесь?
В моем понимании, она не должна быть реализована в виде
asm volatile ("clflush (%0)" :: "r"(p));
В любом случае, очевидным способом его написания будет 'asm volatile (" clflush% 0 "::" m "(* (char *) p))'. Нет необходимости принуждать компилятор использовать простой режим адресации (% reg) без смещения или индекса. ** Удивительная и интересная часть - это '+', а не 'm' **. –