Por que a condição IF verifica se o endereço virtual apontado para str
é encontrado no início da página?
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;
}
Para obter algum ponteiro alinhado à página (para algum novo segmento recém-alocado de seu espaço de endereço virtual ), use mmap(2) (ou posix_memalign(3) ....)
Para encontrar o tamanho de uma página (muitas vezes, mas nem sempre, 4Kbytes) use getpagesize(2) ou preferencialmente sysconf(3) com
_SC_PAGE_SIZE
. Portanto, seu código está errado se um ponteiro não couber em umint
(provavelmente, prefiraintptr_t
) ou se o tamanho da página não for 4K.Consulte também proc(5) , por exemplo, consulte o espaço de endereço virtual do processo de pid 1234 com
cat /proc/1234/maps
e/ou use o comando pmap(1) .BTW malloc(3) geralmente não retorna um ponteiro alinhado à página (portanto, você
str
geralmente não satisfará o teste( ((int)str) & 0x00000FFF) != 0)
...)