아니지만 긍정적이지는 않습니다. 확실하지 않은 경우 다른 변수가 스택의 동일한 지점을 차지할 수 있습니다.함수 로컬 변수는 실행될 때마다 동일한 메모리 위치 집합에 항상 저장됩니까?
답변
아니요. 함수의 로컬 변수가 항상 같은 주소에있는 것은 아닙니다.
재귀 함수를 고려하십시오. 로컬 변수가 같은 위치에 있어야한다면, 재귀 호출 할 때마다 값을 복사해야합니다.
정상적인 방법은 각 함수 호출에 스택에 "블록"이 있다는 것입니다. 동일한 함수를 두 번 연속해서 호출하면 지역 변수 주소는 동일합니다. 재귀 적으로 호출하면 두 번째 호출은 스택의 다른 영역에 있으므로 로컬 변수 주소가 달라집니다.
[메모리에 프로그램을로드하는 소프트웨어는 악의적 인 행위자에 의한 악용을 막기 위해 프로세스의 여러 부분을로드하는 주소를 고의로 임의로 지정할 수 있습니다.] (https://en.wikipedia.org/wiki/Address_space_layout_randomization) –
또한 함수가 두 개 이상의 스레드에서 호출 될 때 어떤 일이 일어나는지 고려하십시오. 하나 이상의 스택에서. –
컴파일러는 "스택 포인터"주소 + 오프셋을 기반으로 메모리 주소를 할당하는 코드를 생성합니다. 따라서 각 로컬의 실제 실제 주소는 함수를 호출 할 때마다 달라집니다. 컴파일러 코드 gen 논리가 동일하기 때문에 오프셋은 매번 동일 할 수 있습니다. 스택 포인터 주소는 다음에 함수를 호출하기 전에 실행될 다른 항목에 따라 다를 수 있습니다.
특히 스택이 있습니까? 이 함수는 둘 이상의 스택에서 호출 될 수 있습니다. –