기본인자진급 관련 질문 있습니다.
글쓴이: totop123 / 작성시간: 월, 2011/11/14 - 4:36오후
얼마전에 기본인자진급관련 글을 읽다가 문득 궁금한것이 떠올랐는데요
기본인자진급이 인자를 스택에 push할 때 일어나는 것 같던데..
가변인자함수를 어셈블리로 짜고 이를 cdecl이나 이러한 규약으로 호출했을때는
어찌하나요?
가령 어셈블리로 t_printf라는 printf와 동일한(기능상) 서브루틴을 만들고 cdecl로 호출할때도 역시
기본인자진급이 일어나는건가요?
일어난다면 t_printf("%c", 'a'); 이렇게 호출했을경우 스택에 'a'도 1byte 가아니라 4byte로 push 되나요?
뭔가 질문이 두서없는데 요지는
어셈블리로 짠 가변인자 함수역시 호출시 기본인자진급이 일어나는지,
하여 어셈블리로 짤때 이것을 고려해야 하는가 입니다.
Forums:
default argument promotion을
default argument promotion을 적용할지 말지, argument의 순서는 어떻게 할 것인지, stack을 통해서 넘길 것인지 register를 이용해서 넘길 것인지... 이 모든 것들은 caller와 callee간의 약속입니다. assembly로 caller와 callee를 혼자서 모두 만든다고 한다면, 반드시 이러한 규약을 지킬 필요는 없습니다. 알아서 하면 되죠.
> t_printf("%c", 'a'); 이렇게 호출했을경우 스택에 'a'도 1byte 가아니라 4byte로 push 되나요?
네, 대부분의 컴파일러는 default argument promotion을 수행합니다. 디버깅 조금만 해 보면 아실 수가 있습니다.
www.gilgil.net
댓글 달기