IF条件が str
指す仮想アドレスがページの先頭にあることを確認するのはなぜですか?
int main () {
char *str ;
str = (char*) malloc (sizeof(char)*4);
if ( ((int)str) & 0x00000FFF) != 0) return 0; // ensure the VA is ..
// at the start of a page
strcpy ( str ,"1234567890") ;
printf ("str=%s", str ) ;
return 0;
}
答え1
(新しく割り当てられた新しいセグメントの一部への)ページソートポインタを取得する仮想アドレス空間)、使用マッピング(2)(またはposix_memalign(3)....)
ページサイズ(常にではありませんが、通常4 KB)を確認するには、次のようにします。ページサイズの取得(2)またはまだ良いシステム構成(3)そして_SC_PAGE_SIZE
。したがって、ポインタが正しくない場合int
(または最も好ましい方法intptr_t
)、ページサイズが4Kでない場合、コードは間違っています。
また、見ることができます工程(5)たとえば、pid 1234を使用してプロセスの仮想アドレス空間を照会するか、cat /proc/1234/maps
次のようにします。マッピング(1)注文する。
ところで割り当て(3)ページソートポインタは通常返されません(したがって、通常はstr
テストを満たしていません( ((int)str) & 0x00000FFF) != 0)
...)