2013-04-25 2 views
4

에서 I이 적은 프로그램이 adresses. 왜 이런 식으로? 아니면 내가 잘못하고있는거야?로컬 변수 C

+2

왜 중요한가요? – John3136

+1

아마도이 질문의 요지는 보이지 않지만 스택이 아래쪽으로 커지기 때문일 수 있습니다. – Pubby

+1

나는 그것이 당신의 컴파일러 (또는 ur OS)가 메모리를 할당하는 방법과 관련이 있다고 생각한다. 일부 스택은 더 높은 기본 주소를 가지며 스택을 위로 이동할수록 감소합니다. 반면에 일부 스택은 더 낮은 스택부터 시작하여 더 높은 스택으로 이동합니다. 걱정할 필요가 없으며 오류도 아닙니다. –

답변

4

로컬 변수의 저장 공간이 스택에 있습니다. X86 프로세서 제품군에는 "아래쪽으로 커지는"스택이 있습니다. 이것은 할당이 발생할 때 (예를 들어 변수 할당) 스택 포인터가 하위 메모리 주소로 아래쪽으로 이동한다는 것을 의미합니다.

&a&a이 할당 된 후 스택 포인터가 다음 할당을 위해 더 낮은 주소로 이동 되었기 때문에 &b보다 큽니다.

+0

"& a가 할당 된 후 스택 포인터가 다음 할당을 위해 더 낮은 주소로 아래로 이동했습니다." - 당신은이 방법으로 생각할 수 있지만 컴파일러가 실제로 한 것은 아닙니다. 아마도 함수 엔트리에서 스택 포인터를 한 번 움직이게하는 코드를 방출했을 것입니다. –

+0

점 찍은, 내 대답은 실제 컴파일러에 의해 취해질 가능성이있는 작업을 나타내지 않습니다. 저레벨 기능 구현에 대해 처음 배우기 시작했을 때, 이런 식으로이 개념을 이해하는 것이 더 쉬워졌고, 무엇이 최적화되고 있는지 파악하기가 더 쉬웠습니다. – Crippledsmurf

2

스택이 커질 수 있습니다.

ab은 정의 순서대로 스택에 할당됩니다. 따라서 &a&b보다 높습니다.