인프런 커뮤니티 질문&답변

Jeongwon Kim님의 프로필 이미지
Jeongwon Kim

작성한 질문수

독하게 되새기는 C 프로그래밍

함수호출규약

함수호출 규약 종류에 따른 장단점 여부

해결된 질문

작성

·

80

0

 선생님, 강의 잘 듣고 있습니다.

함수호출규약 강의에서 __cdecl 및 __stdcall에 대한 비교를 해주셨는데, 2가지 키워드에 대한 활용방안 및 장단점이 존재할까요?

답변 2

0

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

장단점을 논하기에는 세상이 너무나 많이 달라졌다 할 수 있겠습니다. 그 차이로 성능을 논하는 것 자체가 무의미하다 싶을 정도로 하드웨어가 발전했습니다. 어떻게 생각하면 학술적 관점에서 이론을 이해하는 정도로 마무리하는 것이 적절하다 하겠습니다. 그리고 이는 활용의 대상은 아닐 것 같습니다. 그런 특성을 알고 있는 것으로 충분하며 새로운 컴퓨터 구조를 설계할 것이 아니라면 사실상 활용은 어려울 것 같습니다. 참고하시기 바랍니다. 😄

0

안녕하세요, 인프런 AI 인턴입니다.

질문하신 함수 호출 규약인 __cdecl__stdcall에 대한 활용 방안 및 장단점에 대해 간략하게 설명드리겠습니다.

먼저, __cdecl은 C언어의 기본 호출 규약으로, 매개변수를 오른쪽에서 왼쪽으로 스택에 푸시합니다. 이 호출 규약의 가장 큰 특징은 호출자가 스택을 정리하는 책임을 진다는 점입니다. 이로 인해 가변 인자 함수(variadic functions)와 호환되며 유연성이 높다는 장점이 있습니다. 단점으로는 함수 호출 시마다 스택을 정리하는 부담이 호출자에게 있어, 호출 오버헤드가 더 커질 수 있다는 점입니다.

__stdcall은 주로 Windows API에서 사용되는 호출 규약으로, 이 또한 매개변수를 오른쪽에서 왼쪽으로 스택에 푸시합니다. 하지만 __cdecl과 달리, __stdcall은 피호출 함수가 스택을 정리하는 책임을 집니다. 이로 인해 함수의 호출 오버헤드가 감소하는 장점이 있으며, 호출 규약이 고정되어 있어서 바이너리 크기가 더 작아질 수 있습니다. 단점은 가변 인자 함수를 사용할 수 없으멀로 __cdecl보다 유연성이 다소 떨어진다는 것입니다.

따라서, 사용하는 환경이나 필요에 따라 적절한 함수 호출 규약을 선택하는 것이 중요합니다. 유연성과 가변 인자 함수의 사용이 중요하다면 __cdecl을, 호출 오버헤드를 줄이고 바이너리 크기를 작게 유지하는 것이 중요하다면 __stdcall을 선택하면 됩니다.

원하는 답변을 찾지 못하셨나요?
그럼 우측 하단의 ‘문의하기’ 에서 직접 문의해주세요.
최대한 빠르게 답변드리도록 하겠습니다!

Jeongwon Kim님의 프로필 이미지
Jeongwon Kim

작성한 질문수

질문하기