주요 기능은 어디에 할당되나요?

주요 기능은 어디에 할당되나요?

프로세스의 메모리 레이아웃과 관련하여 프로세스 내의 모든 함수 호출은 새 스택 프레임을 스택에 넣습니다.

진입점 기능 이상의 기능을 수행하는 것처럼 main보이기 때문에 이것이 함수에 맞는지 확실하지 않습니다 .main

main새 프로세스가 초기화되면 함수도 자체 스택 프레임을 얻나요?

이것이 구현별 세부 사항인 경우 일반적인 Linux 구현에 대한 설명이 유용할 것입니다.

답변1

일반적 _start으로 주요 지점보다는 진입 지점입니다.

main에 의해 호출되는 또 다른 서브루틴입니다 _start. 다른 서브루틴과 마찬가지로 스택에 스택 프레임을 가져옵니다.

그러나 커널은 생각만큼 많은 일을 하지 않습니다. 프로세스에는 _start많은 작업을 수행하는 main(C 컴파일러에 의해 생성되지만 C 프로그램의 일부가 아님) 이전에 실행되는 일부 코드가 있습니다. setup 및 와 exec같이 이전에 실행되었던(C 프로그램이 실행되기 전) 코드도 있습니다 .stdinstdoutstderr

커널은 _start다른 서브루틴처럼 실행되지 않도록 몇 가지 트릭을 사용할 수 있지만 이는 다음과 같습니다. 커널은 프로세스가 _entry방금 호출된 것처럼 프로세스를 설정합니다(그러나 그렇지 않습니다). 제어가 다시 전달되면 _start다음 exit이 호출됩니다.

(포함된 일부 세부 사항을 얼버무렸을 수도 있습니다 _entry).

관련 정보