정적 링크와 동적 링크의 차이점은 무엇입니까?


우수 답변

차이점으로 이동하기 전에 링크 프로세스를 간략하게 살펴 보겠습니다.

왜 링커입니까?

C 코드 (또는 다른 언어)를 작성하면 .c 형식으로 저장됩니다.

p>

#include

int main(){

printf("quora");

return 0;

}

이제이 프로그램은 컴파일 단계를 거칩니다. 소스 코드는 기계어 명령어로 변환됩니다. .o 또는 .obj 형식으로 저장된 개체 파일입니다. 2 개의 개별 파일이있는 경우 2 개의 개별 obj 파일이 있습니다. 이 파일은 프로그램의 번역 일뿐입니다. 이러한 프로그램을 실행하려면 OS가 실제로 실행할 수있는 실행 파일을 생성해야합니다. 이를 위해 링커를 사용합니다.

이제 링커는 여러 개체 파일에서 단일 실행 파일을 만듭니다. 이제 C 프로그램에서 main () 함수를 사용했지만 그 정의는 어디에 있습니까? 컴파일러의 범위는 하나의 파일로만 제한되므로 다른 파일에서 선언되고 정의 된 참조를 찾지 않습니다.

링커는이 “main ()”함수 정의에 대해 여러 파일을 검색합니다. 그들을 연결합니다. 이제 질문이 있습니다.

정적 연결과 동적 연결 :

  1. 정적 연결 , 모든 라이브러리 모듈이 최종 실행 가능 이미지에 복사됩니다. 프로그램이로드되면 OS는 소스 코드와 참조 라이브러리를 모두 포함하는 단일 파일 만 메모리에 저장합니다. 반면 동적 연결 에서는 외부 또는 공유 라이브러리의 이름 만 메모리에 저장됩니다. 동적 연결을 사용하면 많은 프로그램에서 실행 가능 모듈의 단일 복사본을 사용할 수 있습니다.
  2. 정적 연결 은 컴파일의 마지막 단계에서 링커에 의해 수행되는 반면 동적 연결 은 OS에서 런타임에 수행됩니다.
  3. 통계적으로 연결된 파일 모든 모듈이 이미 연결되어 있으므로 더 많은 디스크와 메모리를 사용합니다. 그러나 동적 연결 에서는 많은 프로그램에서 사용하는 참조 모듈의 복사본이 하나만 저장되어 메모리와 디스크 공간을 절약합니다.
  4. 정적 링크에서 외부 소스 프로그램이 변경된 경우 다시 컴파일하고 다시 링크해야합니다. 그러나 동적 연결 의 경우 단일 모듈 만 업데이트하고 다시 컴파일하면됩니다.
  5. 통계적으로 연결된 프로그램은 동적 프로그램보다 빠릅니다.
  6. 정적으로 링크 된 파일에는 모든 패키지와 모듈이 포함되어 있으므로 호환성 문제가 발생하지 않습니다. 반면 동적 연결 에서는 라이브러리 파일이 별도로 저장되기 때문에 호환성 문제가있을 수 있습니다 (예 : 하나의 라이브러리 파일이 새 버전의 컴파일러에 의해 컴파일 됨).
  7. 통계적으로 연결된 프로그램은 항상로드 시간이 일정하지만 동적으로 연결된 프로그램에서는 시간이 가변적입니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다