2009-11-25 5 views
2

컴파일러가 x86 v x64 아키텍처에서 스택에 변수를 할당 할 때의 차이점은 무엇입니까? 함수가 있다고 가정하십시오.x86 및 x64 스택 프레임

foo(){ 
    int i = 5; 
    i += 4; 
} 

이 두 아키텍처에서 어떻게 스택에 다른 방식으로 할당됩니까?

+0

왜 알고 싶은가요? 특정 목적을 달성하기 위해 노력하고 있습니까? –

+1

* 왜 * 중요합니까? –

+2

네가 왜 알고 싶어하는지 신경써. 때때로 당신은 그걸 위해서 알고 싶어하고 그걸로 bravo. –

답변

2

아마 64 비트 CPU로 작업하지 않은 것 같습니다. [대부분의 어셈블리 프로그래밍은 MIPS로되어 있습니다. 조금 x86], 왜 차이가 있어야합니까?

시도해 보셨습니까? 어떤 지시 사항이 생성되는지보십시오 ...

1

컴파일러는이 변수를 스택에 넣지는 않을 것입니다.이 변수는 레지스터에이 변수를 유지할 가능성이 큽니다. 컴파일러가 스택에 정보를 저장해야하는지 여부에 대한 차이점은 보다 어떻게을 저장하는지에 달려 있습니다.

+1

fairnss 난 그게 아무것도하지 않기 때문에 그것을 완전히 최적화 컴파일러를 용의자 의심 ... – Goz

+0

하지만 64 비트와 32 비트 컴파일러 사이에 변경되지 않습니다. 질문의 예는 바로 그 예입니다. 나는'나는'줄 아래로 몇 번 사용될 것이고 컴파일되지 않을 것이라고 생각할 것이다. –

2

Paul이 지적한 것처럼 컴파일러는이 변수를 스택에 전혀 넣지 않을 것입니다. 레지스터를 다 써 버렸고 결국 변수 저장을 위해 스택을 사용하는 컴파일러의 아이디어를 "register spilling"이라고 부르고, you can read more about it on Wikipedia이라고 말하고 싶습니다.

4

Microsoft의 x64 ABI의 경우 "스택 사용"에서 http://msdn.microsoft.com/en-us/library/7kcdt6fy.aspx을 확인하십시오. x86 ABI와는 상당히 다릅니다.

기타 x64 ABI (Linux, OS X 등)는 Microsoft와 비슷하지만 미묘하게 다릅니다. GCC의 문서는 아마도 그것들을 찾기 시작할 수있는 좋은 장소 일 것이다.

관련 문제