2013-08-08 5 views
5

x64 플랫폼에 대한 Microsoft 호출 규칙이 한 곳으로 좁혀 졌음을 몇 군데 보았습니다. 호출자가 스택을 정리하고 (cdecl) 스택과 레지스터의 조합으로 매개 변수가 전달됩니다. 정확한 세부 사항은 여기). 필자는 이것이 이것이 OS의 호출 규칙이라면 Windows를 목표로하는 다른 모든 컴파일러 (예 : mingw-w64)도이를 따르는 것으로 가정합니다.x64에서의 전화 규칙

다른 주요 플랫폼 (x64 리눅스 등)에서도이 호출 규칙이 적용됩니까? 아니면 리눅스는 여전히 다중 호출 규칙을 사용하고 있습니까? GCC 또는 Clangx64 리눅스에서 여러 호출 규칙을 허용합니까?

+6

즐거운 날이 막 끝납니다. Microsoft는 __vectorcall 호출 규칙을 추가하고 있습니다. 최대 6 개의 '__m128'값이 SSE2 레지스터를 통해 전달됩니다. –

답변

8

나는 방금 대답 herehere을 찾았습니다. 기본적으로 Windows는 한 가지 방법을 사용합니다. 다른 모든 사람들이 다른 방식으로 수행하지만, 각 플랫폼은 한 방향으로 만 수행합니다 (x86을 사용하는 플랫폼 당 여러 가지 방법과 반대)

+1

양쪽에 손가락을 대고 있지는 않지만 x86 기반의 컨벤션으로 인해 고통을 겪은 후 표준에 동의하는 것이 x64에서 우선적이었을 것이라고 생각할 수 있습니다 – Basic