현재 c++에서 콜링 컨벤션이 주 퍼포먼스에 영향을 끼치는 부분이 있나요?
그리고 특별히 콜링 컨벤션을 신경써야 할 만큼 중요한 케이스가 있나요옷?
궁금합니닷!
왠지 숙제 같은데 ㅡㅡㅋ
방향은 잡아주지. calling convention 중, fastcall 같은 경우엔 레지스터를 이용한 파라메터 전달을 주 골자로 한다.
즉 스택을 이용하지 않을 수 있을 때 효율적인데, 이미 사용되고 있는 레지스터가 많아 레지스터 회피 ( 스택 으로의 ) 가 일어나야 하는 경우엔
아무 득이 없다.
calling convention 은, 파라메터를 어떤 순서로 던질지, 스택을 caller 가 비울지 callee 가 비울지를 주 내용으로 한다.
니가 간단히 살펴보면 알 수 있는 일.
즉 함수를 호출하는쪽에선 자신이 비워야 한다고 생각하고 호출후 비우고, 호출 되는쪽 ( 함수 ) 에선 자기가 비워야 한다고 생각하고 비워버리면 stack underflow, 정반대의 상황이 벌어지면 결국 stack overflow 로 흘러간다는 이야기.
DLL 처럼 호출하는 쪽과 호출 되는 쪽의 시점이 다른, 개발자도 다른 경우 calling convention 을 지키지 않을때 똥을 피할 수 없게 된다.
감사합니다!
왠지 숙제 같은데 ㅡㅡㅋ
방향은 잡아주지. calling convention 중, fastcall 같은 경우엔 레지스터를 이용한 파라메터 전달을 주 골자로 한다.
즉 스택을 이용하지 않을 수 있을 때 효율적인데, 이미 사용되고 있는 레지스터가 많아 레지스터 회피 ( 스택 으로의 ) 가 일어나야 하는 경우엔
아무 득이 없다.
calling convention 은, 파라메터를 어떤 순서로 던질지, 스택을 caller 가 비울지 callee 가 비울지를 주 내용으로 한다.
니가 간단히 살펴보면 알 수 있는 일.
즉 함수를 호출하는쪽에선 자신이 비워야 한다고 생각하고 호출후 비우고, 호출 되는쪽 ( 함수 ) 에선 자기가 비워야 한다고 생각하고 비워버리면 stack underflow, 정반대의 상황이 벌어지면 결국 stack overflow 로 흘러간다는 이야기.
DLL 처럼 호출하는 쪽과 호출 되는 쪽의 시점이 다른, 개발자도 다른 경우 calling convention 을 지키지 않을때 똥을 피할 수 없게 된다.
감사합니다!