0

MIPSマシンでNUMACTLをデバッグしています。numa_police_memory()APIには、次のものがあります。

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によって適用されたすべてのメモリが特定の物理メモリに割り当てられるように、VMの読み取りに使用されます。しかし、このasmコードはどのように機能しますか?アセンブリ言語が読めません!最初の二重引用符が空なのはなぜですか?

ありがとう

4

1 に答える 1

0

asm興味深いことに、ステートメントは使用されていますが、このスニペットにはアセンブリ コードがまったく含まれていません。これには、空のアセンブリ「プログラム」、出力の空のリスト、および入力のリストが含まれています。入力仕様は、レジスタにあることを強制((volatile unsigned char *)mem)[i]します。したがって、このちょっとした魔法が行うことは、各ページの最初のバイトのロードを生成することだけです (ページの事前フォールト)。

于 2012-06-29T16:32:21.260 に答える