2012-10-04 4 views
1

C에서 함수가 반환되지 않으면 스레드의 실행 스택은 어떻게됩니까?함수가 반환되지 않으면 실행 스택은 어떻게됩니까?

void funcB() __attribute__ ((noreturn)); 

int funcA (...) 
{ 
    // do stuff 
    funcB(); 
    // do more stuff 
} 

이 상황의 예는 funcA는 새로운 스레드를 생성하는 커널 함수이고 funcB 사용자 모드로 새 스레드를 전환하고 실행하자 커널 코드 말한다이다.

감사합니다.

+1

질문 (및 질문 자체)에 설명 된 이벤트가 명확하지 않습니다. 제발 좀 더 자세히 설명해주세요. –

+1

반환하지 않는 함수는 종료 함수이거나, 전체 프로세스를 정리하려고하는 함수이거나, 전체 프로그램 이미지를 대체하는'exec'와 같은 함수입니다. 단점은 더 이상 스택이 필요 없다는 것입니다. –

+0

네, 어떻게 될 것으로 예상됩니까? exit (0)도 반환하지 않습니다. 스택이 끝날 때까지 사용 된 스택은 프로그램이 종료 될 때까지 사용됩니다 ... –

답변

0

본 적이 있습니까? http://gcc.gnu.org/onlinedocs/gcc-4.3.2//gcc/Function-Attributes.html

noreturn에 대한 절에 말하기를 :

호출 기능에 의해 저장 레지스터는 noreturn 함수를 호출하기 전에 복원한다고 가정하지 마십시오.

예를 들어, 스택 포인터 (또는 다른 스택 프레임 요소)가 noreturn 함수가 완료된 후 복원된다는 보장이 없다고 가정합니다.

관련 문제