仮想アドレスがページの先頭にあることを確認します。

仮想アドレスがページの先頭にあることを確認します。

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)...)

関連情報