구조체 반환 최적화

[원본 링크]

죠우저프님 작성

typedef struct _RECT
    {
    int left, top, right, bottom;
    } RECT;


RECT Func()
    {
    RECT R;

    R.left=1;
    R.top=2;
    R.right=3;
    R.bottom=4;
    return R;
        //함수의 리턴은 eax 레지스터(실수의 경우 MMX0)를 이용하는데 어떻게 구조체를 리턴하는 것일까?
        //로컬변수 R은 함수 종료시 없어지는데 리턴하는 것이 의미가 있을까?
    }


int main()
    {
    RECT R;

    R=Func();
    printf("RECT: %d,%d,%d,%d\n", R.left, R.top, R.right, R.bottom);

    return 0;
    }




컴파일러가 변형



위의 코드를 컴파일하면 컴파일러가 코드를 이렇게 변형하여 컴파일합니다.


void Func(RECT *lpRet)   //RECT Func() 를 변형함
    {
    RECT R;

    R.left=1;
    R.top=2;
    R.right=3;
    R.bottom=4;
    *lpRet=R;           //return R; 를 변형함
    }


int main()
    {
    RECT R;

    Func(&R);           //R=Func(); 를 변형함

    printf("RECT: %d,%d,%d,%d\n", R.left, R.top, R.right, R.bottom);

    return 0;
    }