2012-08-05 4 views
0

이것은 이론적 인 질문입니다. 내 예제는 C를 사용하지만 언어는 그다지 중요하지 않습니다.과도한 스택 사용

의 내가

int x0 = 0; 
int x1 = 1; 
. 
. 
. 
int x100 = 100; 

가 지금은 X0를 호출 할 스택에 많은 변수를 많이 만들 수 있다고 가정 해 봅시다. 스택은 LIFO이므로, x0을 가져 오는 동안 x100, ..., x1이 일시적으로 저장되는 위치는 어디입니까? 이 말은 그들이 레지스터에 배치 될 필요가없는 것입니까? 그렇다면 레지스터가 충분하지 않습니다. 카페테리아 쟁반의 표준 유추를 사용하여, 내가 바닥 트레이에 가려고한다면, 다른 쟁반을 잡는 데 많은 사람들이 필요합니다. 스택이 세 개가 아니라면, 제가 할 수있는 "하노이 타워 "솔루션 ...

분명히이 질문은 스택에 대한 나의 무지와 어떻게 작동 하는지를 보여줍니다. 미리 감사드립니다.

+0

글쎄, C 프로그램의 스택은 성장하고 줄어들지 만 액세스하지 않을 때 스택처럼 동작합니다. 스택에 "깊은"관계없이 모든 요소에 직접 액세스 할 수 있습니다. 나는 당신이 어셈블리를 보길 권한다. –

+0

참고 : C에서는 로컬 변수를 만들었 기 때문에 로컬 변수가 스택에 있다는 것을 의미하지는 않습니다. 그것은 레지스터에 갈 수도 있고, 스택으로 갈 수도 있고, 움직일 수도 있고, 아무데도 갈 수 없다 (제거 될 수도 있음). 코드에 대한 어셈블리를 보면 모든 변수가 제거 될 것으로 생각됩니다. –

+0

@ Cicada. 알겠지만 스택은 LIFO에 의해 성장하지만 액세스는 직접적입니다. 말이된다. –

답변

0

스택의 상단은 단순히 메모리 주소이므로 오프셋을 사용하여 액세스 할 수 있습니다. 즉, 이렇게하면 코드가 매우 약해집니다.

LIFO의 전체 점은 필요한 다음 것이므로 마지막 값은 귀하의 예에서 역순으로 푸시하거나 모두 함께 구조를 정의 할 수 있습니다 거기에 그 주소를 스택에 밀어 넣습니다.

0

세분화 된 수준의 스택이 아닙니다.

스택은 스택 프레임을 저장합니다. 각 스택 프레임은 (스택 포인터에 상대적인 오프셋에 의해) 일정한 시간에 액세스 할 수있는 일련의 로컬 변수를 저장합니다.