java - C,C++函数调用时入栈顺序 是编译时还是运行时完成的?
天蓬老师
天蓬老师 2017-04-18 10:48:16
0
3
845

我的理解是静态编译时,因为C语言是过程性语言只能静态联编不能动态联编,而C++编译于此类似,所以是编译时完全。不知道这样对不对?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

모든 응답(3)
阿神

스택에 푸시된

순서 는 컴파일 타임에 결정됩니다.

함수 호출 전에 스택에 푸시해야 하는 주요 사항은 함수 매개변수이며, 매개변수는 모두 고정되어 있습니다(변수 매개변수는 매크로에 의해 결정되는 오프셋일 뿐입니다).
함수를 호출하는 코드는 코드 세그먼트에 배치되고, 스택에 푸시하는 것은 명령어 형식으로 이루어지므로 순서는 컴파일 타임에 결정됩니다.

阿神

@lianera가 말했듯이 스택에 푸시하는 순서는 컴파일 타임에 결정됩니다.

예를 하나 보여드리겠습니다.
이런 코드가 있습니다

으아아아

컴파일 후의 어셈블리 코드는 다음과 같습니다

으아아아

컴파일 과정에서 매개변수가 전달되는 순서와 매개변수, 지역 변수 등이 스택(상대 위치)에 배치되어야 하는 순서를 이해하지 못해도 상관없습니다. 모두 결정되었습니다. 프로그램이 해당 프로그램으로 실행되면 컴파일된 순서대로 스택이 동작하게 됩니다.

Ty80

스택에 푸시하는 것은 런타임 중에만 발생하는 프로세스가 아닌가요? 컴파일은 단지 바이트코드로 변환하는 과정일 뿐입니다. 왜 스택에 푸시를 하는 걸까요?

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿