2014-11-18 4 views
2

int, char 등의 임베디드 타입은 레지스터를 사용하여 함수에서 반환 될 수 있지만 함수가 큰 객체를 반환하는 경우는? 나는 프로세스의 스택이 그런 문제에 사용될 수 없다고 제안한다. 맞습니까? 누구든지 객체가 피 호출자에게 어떻게 전달되는지 설명 할 수 있습니까?C++ 객체 값이 함수에서 어떻게 반환 되는가?

+0

왜 스택이 작동하지 않습니까?! 스택 제한은 OS에 따라 다르지만 대부분의 대형 객체는 힙과 객체에 대한 자체 데이터를 스택에 자체 생성합니다. –

+0

@Doggynub는 반환 값이 스택에 푸시 될 때 함수 호출/종료에서 특정 순간을 지정할 수 있습니까? – vard

+0

당신이 물어보고있는 아키텍처를 지정해야합니다. 또한 적절한 문서를 읽으십시오. – Jester

답변

3

일반적으로 대부분의 컴파일러에서 스택이이 용도로 사용됩니다. 대형 물체의 경우에도 여전히 그렇습니다. 호출 함수는 호출 된 함수가 리턴 할 때 호출 된 함수 값을 스택에서 찾을 것으로 예상합니다.

해결 방법 중 하나는 함수가 호출되기 전에 스택 영역을 예약하는 것입니다. 호출 된 함수는이 영역에 액세스하여 결과를 채울 수 있습니다 (스택에 대한 액세스는 결국 맨 위에 제한되지 않습니다).

+0

호출 된 함수에서 스택에 넣을 수있는 값보다 더 많은 값을 반환하지 않습니다? 함수 호출 수신자는 스택에서 주소를 반환 한 다음 반환하려는 객체를 넣은 다음 팝 된 주소로 점프를 수행합니까? – vard

+0

이것은 호출 된 스택에서 포인터가 호출 된 스택의 calLee 스택을 가리키는 포인터를 가지도록 처리됩니다. –

+0

해결 방법 중 하나는 함수가 호출되기 전에 스택 영역을 예약하는 것입니다. 호출 된 함수는이 영역에 액세스하여 결과를 채울 수 있습니다 (스택에 대한 액세스는 결국 맨 위에 제한되지 않습니다). –

관련 문제