찾다

 >  Q&A  >  본문

java - C,C++函数调用时入栈顺序 是编译时还是运行时完成的?

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

天蓬老师天蓬老师2802일 전832

모든 응답(3)나는 대답할 것이다

  • 阿神

    阿神2017-04-18 10:50:16

    스택에 푸시된

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

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

    회신하다
    0
  • 阿神

    阿神2017-04-18 10:50:16

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

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

    으아아아

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

    으아아아

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

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-18 10:50:16

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

    회신하다
    0
  • 취소회신하다