기본 콘텐츠로 건너뛰기

C++ - 함수 호출 규약

cdecl

- 함수에 인자를 전달할때는 stack에 저장되어 전달된다.

- 인자정리방법은 caller 방식을 따른다. 
  caller는 함수가 호출되고 기능을 한 후 되돌아가서 인자공간이 정리되는 방식입니다.

- 주로 c 또는 c++ 에서 기본으로 사용하는 함수호출규약.




stdcall

- 인자전달방법으로 stack을 통한다.

- 인자정리방법이 callee방식을 따른다.
  이부분이 cdecl과 다릅니다. callee는 호출된 함수내에서 인자를 해제한 후 돌아가는 방식입니다.
 이 방식은 인자공간이 해제되는 공간이 정해져 있어서 가변인자함수를 사용하기 어렵다.

- 윈도우 API (WinAPI)에서 사용되는 함수호출규약




__fastcall

- 인자전달방법으로 stack 과 register를 사용한다.
 레지스터는 메모리보다 동작 방식이 빠르기 때문에 다른 함수호출규약에 비해 실행속도가 빠르다.
 그러나 c언어에서는 그대로 사용하면 형태만 따르기 때문에 코드가 늘어나서 오히려 느려질 수도 있다.
 그렇기 때문에 c언어에서는 특별한 방식을 사용해야한다.
 레지스터는 ECX와 EDX를 사용하는데 첫번째 인자를 ECX에 두번째 인자를 EDX에 세번째인자부터는 stack에 저장한다.

- 인자정리방법으로 callee 방식을 따른다.

- 주로 델파이언어라는 곳에서 기본적인 함수호출규약으로 사용한다.



댓글

이 블로그의 인기 게시물

C# - Serial Port ASCII/HEX Format

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO.Ports; namespace SerialTest1 {     public partial class Form1 : Form     {         delegate void MyDelegate();      //델리게이트 선언(크로스 쓰레드 해결하기 위한 용도)         bool SendForamt = true;          // true : ASCII   false : HEX         bool ReceiveFormat = true;       // true : ASCII   false : HEX         public Form1()         {             InitializeComponent();          ...

C# - Windows Form 에 있는 control 찾기

// 아래 코드는 form 의 최상위 control만 찾을 수 있음. // panle, groubbox ... 내부에 있는 control은 찾지 못함. Control GetControlByName(string Name) {     foreach (Control c in this.Controls)         if (c.Name == Name)             return c;     return null; } // form 의 모든 control을 찾을 수 있음. string name = "btnBit" + (i + 1).ToString("D2"); var tmpBtn = this.Controls.Find(name, true).FirstOrDefault(); if (tmpBtn != null) {     if (value == 1) tmpBtn.BackColor = Color.Lime;     else tmpBtn.BackColor = Color.Gray; }

C# - ARGB 색상

속성 A 이  Color  구조체의 알파 구성 요소 값을 가져옵니다. Alice Blue ARGB 값이  #FFF0F8FF 인 시스템 정의 색을 가져옵니다. Antique White ARGB 값이  #FFFAEBD7 인 시스템 정의 색을 가져옵니다. Aqua ARGB 값이  #FF00FFFF 인 시스템 정의 색을 가져옵니다. Aquamarine ARGB 값이  #FF7FFFD4 인 시스템 정의 색을 가져옵니다. Azure ARGB 값이  #FFF0FFFF 인 시스템 정의 색을 가져옵니다. B 이  Color  구조체의 파랑 구성 요소 값을 가져옵니다. Beige ARGB 값이  #FFF5F5DC 인 시스템 정의 색을 가져옵니다. Bisque ARGB 값이  #FFFFE4C4 인 시스템 정의 색을 가져옵니다. Black ARGB 값이  #FF000000 인 시스템 정의 색을 가져옵니다. Blanched Almond ARGB 값이  #FFFFEBCD 인 시스템 정의 색을 가져옵니다. Blue ARGB 값이  #FF0000FF 인 시스템 정의 색을 가져옵니다. Blue Violet ARGB 값이  #FF8A2BE2 인 시스템 정의 색을 가져옵니다. Brown ARGB 값이  #FFA52A2A 인 시스템 정의 색을 가져옵니다. Burly Wood ARGB 값이  #FFDEB887 인 시스템 정의 색을 가져옵니다. Cadet Blue ARGB 값이  #FF5F9EA0 인 시스템 정의 색을 가져옵니다. Chartreuse ARGB 값이  #FF7FFF00 인 시스템 정의 색을 가져옵니다. Chocolate ARGB 값이  #FFD2691E 인 시스템 정의 색을 가져옵니다. Coral ARGB ...