컴파일러가 x86 v x64 아키텍처에서 스택에 변수를 할당 할 때의 차이점은 무엇입니까? 함수가 있다고 가정하십시오.x86 및 x64 스택 프레임
foo(){
int i = 5;
i += 4;
}
이 두 아키텍처에서 어떻게 스택에 다른 방식으로 할당됩니까?
컴파일러가 x86 v x64 아키텍처에서 스택에 변수를 할당 할 때의 차이점은 무엇입니까? 함수가 있다고 가정하십시오.x86 및 x64 스택 프레임
foo(){
int i = 5;
i += 4;
}
이 두 아키텍처에서 어떻게 스택에 다른 방식으로 할당됩니까?
아마 64 비트 CPU로 작업하지 않은 것 같습니다. [대부분의 어셈블리 프로그래밍은 MIPS로되어 있습니다. 조금 x86], 왜 차이가 있어야합니까?
시도해 보셨습니까? 어떤 지시 사항이 생성되는지보십시오 ...
컴파일러는이 변수를 스택에 넣지는 않을 것입니다.이 변수는 레지스터에이 변수를 유지할 가능성이 큽니다. 컴파일러가 스택에 정보를 저장해야하는지 여부에 대한 차이점은 보다 어떻게을 저장하는지에 달려 있습니다.
fairnss 난 그게 아무것도하지 않기 때문에 그것을 완전히 최적화 컴파일러를 용의자 의심 ... – Goz
하지만 64 비트와 32 비트 컴파일러 사이에 변경되지 않습니다. 질문의 예는 바로 그 예입니다. 나는'나는'줄 아래로 몇 번 사용될 것이고 컴파일되지 않을 것이라고 생각할 것이다. –
Paul이 지적한 것처럼 컴파일러는이 변수를 스택에 전혀 넣지 않을 것입니다. 레지스터를 다 써 버렸고 결국 변수 저장을 위해 스택을 사용하는 컴파일러의 아이디어를 "register spilling"이라고 부르고, you can read more about it on Wikipedia이라고 말하고 싶습니다.
Microsoft의 x64 ABI의 경우 "스택 사용"에서 http://msdn.microsoft.com/en-us/library/7kcdt6fy.aspx을 확인하십시오. x86 ABI와는 상당히 다릅니다.
기타 x64 ABI (Linux, OS X 등)는 Microsoft와 비슷하지만 미묘하게 다릅니다. GCC의 문서는 아마도 그것들을 찾기 시작할 수있는 좋은 장소 일 것이다.
왜 알고 싶은가요? 특정 목적을 달성하기 위해 노력하고 있습니까? –
* 왜 * 중요합니까? –
네가 왜 알고 싶어하는지 신경써. 때때로 당신은 그걸 위해서 알고 싶어하고 그걸로 bravo. –