2014-02-16 4 views
-1

다음 예제를 기반으로 가상 주소와 실제 주소의 차이를 설명하십시오. 같은 주소에서 다른 주소를 사용하는 방법과 여기에 특별히 사용 된 주소를 설명하십시오. 또한 두 방법을 항상 구분할 수 있습니다.가상 주소와 실제 주소의 차이점은 무엇입니까?

코드 :

if(fork()==0) 
{ 
    a=a+5; 
    printf("%d%d", a, &a); 
} 
else 
{ 
    a=a-5; 
    printf("%d%d", a, &a); 
} 

무엇 주소가 문 모두를 참조 &a합니까?

답변

0

& 변수가 독립적으로 선언 된 경우 & else 블록을 나타내는 경우가 있습니다.

그러나 변수 "a"가 "if"위에 선언 된 경우 변수 "a"는 &에 의해 액세스 할 수있는 동일한 실제 주소를가집니다.

"a"의 값을 더하거나 뺄 때 "a"가 저장된 메모리에 저장된 내용을 변경하면 주소가 아닌 a의 값을 의미합니다.

실제 주소이기 때문에, a의 주소는 변경하지 않습니다. 당신이 정말로 다음 다섯 개 메모리 블록을 갈 수와 같은

*p = &a; 
p+=5; 
p-=5; 

이 방법에 대한 포인터를 가리키는이 주소로 재생하려면

앞으로 & 뒤로 (하나 개의 블록 크기는은 "변수의 유형에 따라 달라집니다 "). 가상 주소에 대한 자세한 내용은

: 도움이 refer here

희망.

+0

실제 주소라는 의견을 제외하고 나는 여기에 쓰여진 것에 동의합니다. 커널의 가장 낮은 영역 만 실제 주소로 작업합니다. 다른 모든 코드는 가상 주소로 작동합니다. 특히 Unix와 같은 시스템의 사용자 프로그램은 가상 주소로만 작동하며 커널은 가상 주소에서 실제 주소로 매핑을 제어하며 MMU는 해당 매핑을 처리합니다. 기본적으로 사용자 코드에서 가상 주소에 해당하는 실제 주소를 결정할 방법이 없습니다. –

관련 문제