강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của vanilla165981696
vanilla165981696

câu hỏi đã được viết

Lập trình C để suy ngẫm

Quy ước gọi hàm

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

Đã giải quyết

Viết

·

216

0

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

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

ckernelsecure-coding

Câu trả lời 2

0

nullnull8537님의 프로필 이미지
nullnull8537
Người chia sẻ kiến thức

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

0

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

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

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

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

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

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

Hình ảnh hồ sơ của vanilla165981696
vanilla165981696

câu hỏi đã được viết

Đặt câu hỏi