numa_police_memory
Я отлаживаю NUMACTL на машине MIPS. В API numa_police_memory () мы имеем:
void numa_police_memory(void *mem, size_t size)
{
int pagesize = numa_pagesize_int();
unsigned long i;
for (i = 0; i < size; i += pagesize)
asm volatile("" :: "r" (((volatile unsigned char *)mem)[i]));
}
Кажется "asm volatile("":: "r" (((volatile unsigned char *)mem)[i]));" используется для чтения виртуальной машины, так что вся память, примененная предыдущим mmap, будет выделена для некоторой конкретной физической памяти. Но как работает этот ассемблерный код? Я не могу читать на ассемблере! Почему первая двойная кавычка пуста???
Спасибо
1 ответ
Интересно, что в этом фрагменте вообще нет ассемблерного кода, хотя asm
заявление используется. Он содержит пустую "программу" сборки, пустой список выходов и список входов. Входные спецификации сил ((volatile unsigned char *)mem)[i]
быть в реестре. Таким образом, все, что нужно сделать, это сгенерировать загрузку первого байта каждой страницы (предварительно обработать страницы).