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] быть в реестре. Таким образом, все, что нужно сделать, это сгенерировать загрузку первого байта каждой страницы (предварительно обработать страницы).

Другие вопросы по тегам