>  기사  >  백엔드 개발  >  다양한 호출 규칙이 C/C 기능 실행에 어떤 영향을 미칩니까?

다양한 호출 규칙이 C/C 기능 실행에 어떤 영향을 미칩니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-20 03:10:02259검색

How Do Different Calling Conventions Impact C/C   Function Execution?

C/C의 다양한 호출 규칙

C/C는 함수 인수와 반환 값이 처리되는 방법을 지정하는 다양한 호출 규칙을 제공합니다. 이러한 규칙을 이해하는 것은 코드를 최적화하고 프로그램의 여러 부분 간의 효율적인 상호 작용을 보장하는 데 중요합니다.

사용 가능한 호출 규칙

C/C에서 사용할 수 있는 몇 가지 호출 규칙이 있습니다.

  • cdecl: 스택에 전달된 인수, 레지스터의 반환 값(EAX for 정수, 부동 소수점의 경우 ST0)
  • syscall: EAX, ECX 및 EDX 레지스터가 보존되지 않는다는 점을 제외하면 cdecl과 유사합니다.
  • pascal: 매개변수 왼쪽에서 오른쪽으로 밀기, 수신자 잔액 stack
  • stdcall: 호출자 정리 stdcall, 매개변수가 오른쪽에서 왼쪽으로 푸시됨, EAX의 값 반환
  • fastcall: 처음 두 인수 전달 ECX 및 EDX에서 나머지 인수는 stack
  • 벡터콜: SIMD 레지스터를 사용하여 벡터 인수를 전달하는 경우
  • safecall: 캡슐화된 오류 처리, EAX에 반환된 HResult
  • Microsoft X64 호출 규칙: Windows 및 UEFI에서 사용됩니다. RAX의 64비트 반환 값, RCX-R9
  • thiscall에 전달된 64비트 인수: cdecl과 유사하지만 포인터가 숨겨진 인수를 통해 전달되었습니다

자세히 설명

cdecl:
cdecl(값별 호출)에서 호출된 함수는 반환하기 전에 스택을 정리하는 책임을 맡습니다. 인수는 오른쪽에서 왼쪽으로 스택에 푸시됩니다.

pascal:
pascal(값-결과별 호출)에서는 호출 수신자가 반환 전에 스택 균형을 조정하는 일을 담당합니다. 반환 값도 스택으로 다시 전달됩니다.

stdcall:
stdcall(값별 호출)에서 호출 수신자는 스택 정리를 담당합니다. 인수는 오른쪽에서 왼쪽으로 스택에 푸시되고 반환 값은 EAX 레지스터에 저장됩니다.

fastcall:
fastcall(레지스터별 호출)에서 처음 두 인수는 ECX 및 EDX 레지스터에 전달됩니다. 나머지 인수는 오른쪽에서 왼쪽으로 스택에 푸시됩니다.

**다른 호출 규칙에 대한 자세한 내용은 다음 포괄적인 답변을 참조하세요.]

위 내용은 다양한 호출 규칙이 C/C 기능 실행에 어떤 영향을 미칩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.