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)....)
페이지 크기(항상은 아니지만 일반적으로 4KB)를 확인하려면 다음을 사용하세요.페이지 크기 가져오기(2)아니면 아직 더 나은시스템 구성(3)그리고 _SC_PAGE_SIZE
. 따라서 포인터가 맞지 않거나 int
(가장 선호되는 방식 intptr_t
) 페이지 크기가 4K가 아닌 경우 코드가 잘못된 것입니다.
당신은 또한 볼 수 있습니다공정(5), 예를 들어 pid 1234를 사용하여 프로세스의 가상 주소 공간을 쿼리하거나 cat /proc/1234/maps
다음을 사용합니다.매핑(1)주문하다.
그런데할당(3)페이지 정렬 포인터는 일반적으로 반환되지 않습니다(따라서 str
일반적으로 테스트를 만족하지 못합니다 ( ((int)str) & 0x00000FFF) != 0)
...)