2017-11-01 10 views
1

포인터를 사용하여 난 의심 나는 프로그램에서 변수 메모리 어드레스을 확인 포인터에 해당 주소를 저장할 수 있다는 것이 가능하다 그 위치에 저장된 값을 출력 할 수 있습니다.직접 메모리 액세스, I는 <strong>C++ 포인터</strong>와 재생 된 어드레스

프로그램 1 :

int t1 = 34; 
int t2 = 0; 

std::cout << &t1; 
std::cin>>t2; 

이것은 제 프로그램 I 입력 COUT 의해 출력 된 제 프로그램 T1의 어드레스 .

프로그램 2 :

int* t3 = (int*)address_of_t1 // address of t1 is not a function....it will be replaced by the address returned by first program 
int out = *t3; 
cout <<out; 

내가 처음 프로그램을 실행하지 않고는 내가 두 번째 프로그램을 실행 동시에 그런 .. 을 계속 실행, 입력 대기 할 수 있지만, 0 두 번째 프로그램이 항상 출력, 그것은 결코 첫 번째 프로그램의 t1 값을 보여줍니다.

+2

최신 OS에서이 프로그램을 실행하는 경우 기본적으로 관련없는 두 프로세스의 메모리 공간이 서로 얽히게됩니다. – StoryTeller

+0

"직접 메모리 액세스"라는 용어는 [특별한 의미] (https://en.wikipedia.org/wiki/Direct_memory_access)가 있으므로 불행합니다. – MSalters

답변

0

현대적인 운영 체제에서는 불가능합니다. 메모리는 가상입니다. 즉, 완전히 다른 물리적 메모리 위치에 매핑 된 두 개의 다른 프로세스에서 동일한 주소를 가질 수 있습니다. 자세한 내용은 여기를 참조하십시오 : https://en.wikipedia.org/wiki/Virtual_memory.

+1

불가능하지 않습니다. 일부 OS 전용 호출 및 프로세스 설정이 필요합니다. – StoryTeller

0

아니요, 불가능합니다.

단일 프로세스에서 얻는 주소는 해당 프로세스에서 고유합니다. 현대의 모든 운영 체제는 실행 가능한 코드를 실행하기 위해 가상 메모리 주소 공간을 할당합니다.