2017-12-11 10 views

답변

6

아니요. 함수의 로컬 변수가 항상 같은 주소에있는 것은 아닙니다.

재귀 함수를 고려하십시오. 로컬 변수가 같은 위치에 있어야한다면, 재귀 호출 할 때마다 값을 복사해야합니다.

정상적인 방법은 각 함수 호출에 스택에 "블록"이 있다는 것입니다. 동일한 함수를 두 번 연속해서 호출하면 지역 변수 주소는 동일합니다. 재귀 적으로 호출하면 두 번째 호출은 스택의 다른 영역에 있으므로 로컬 변수 주소가 달라집니다.

+2

[메모리에 프로그램을로드하는 소프트웨어는 악의적 인 행위자에 의한 악용을 막기 위해 프로세스의 여러 부분을로드하는 주소를 고의로 임의로 지정할 수 있습니다.] (https://en.wikipedia.org/wiki/Address_space_layout_randomization) –

+1

또한 함수가 두 개 이상의 스레드에서 호출 될 때 어떤 일이 일어나는지 고려하십시오. 하나 이상의 스택에서. –

1

컴파일러는 "스택 포인터"주소 + 오프셋을 기반으로 메모리 주소를 할당하는 코드를 생성합니다. 따라서 각 로컬의 실제 실제 주소는 함수를 호출 할 때마다 달라집니다. 컴파일러 코드 gen 논리가 동일하기 때문에 오프셋은 매번 동일 할 수 있습니다. 스택 포인터 주소는 다음에 함수를 호출하기 전에 실행될 다른 항목에 따라 다를 수 있습니다.