개발 & 일상

Java Static Link(정적 링크) Dynamic Link(동적 링크) 본문

💻 개발공부/☄️ java

Java Static Link(정적 링크) Dynamic Link(동적 링크)

벵갈벵 2023. 1. 14. 18:46
728x90
반응형

Static Link(정적 링크)란?

 

컴파일을 링크과정을 통해 실행파일을 만들때  실행파일에 필요한 라이브러리파일(*.a or *.lib)을 같이 포함시켜서

.exe 파일을 만드는것을 Static Link 정적링킹 이라고 합니다. 

컴파일이 끝나면 라이브러리 파일(LIB)이 없이도 프로그램을 실행할 수 있다.

 

장점

1. 해당 응용프로 그램이 모든 라이브러리를 포함하고 올바른 버전이라는걸 확신할수있다.

2.프로그램 배포시 하나의 실행파일만 제공하게 되어 단순화

3.직접 구현한 코드를 라이브러리화 시켜 기술 유출 방지

4. 컴파일 시간 단축

 

단점

1. 실행 파일 내에 라이브러리 코드가 저장되기 때문에 메모리를 어마어마하게 잡아 먹는다..

2.하나의 라이브러리를 여러 프로그램이 사용했다면 각 프로그램 마다 똑같은 라이브러리가 중첩되어 사용될수도있다.(메모리낭비)

 

 

 

Dynamic Link (동적 링크)란?

말 그대로 "동적으로 링크를 한다"

Static Link를 사용했을때 메모리에 똑같은게 계속 너무 많이 올라가는 상황이 발생할경우 

Dynamic Link 를 사용하면 많이 호출되는 동적 라이브러리파일(*.a or *.lib) 메모리에 올려놓고 그때그때 사용!

실행 파일을 만들 때 프로그램에 라이브러리를 복사시키지 않고 링크시키는 방식이다.

그러면 실행파일에는 호출할 함수의 정보만 포함되고 실제 함수 코드는 복사되지 않으므로 실행파일의 크기는 작아진다.

실행 파일은 실제코드를 가지고 있지 않으므로 프로그램 실행시에 DLL(동적라이브러리)이 꼭 있어야 한다.

동적 링크에는 묵시적 링크 와 명시적 링크가 있다.

 

장점

1.메모리 요구사항이 훨씬 적다.(실행을 할때마다 필요한 라이브러리를 링크해서 사용하기 때문)

2.다른 프로그램에서 다른 라이브러리를 참조하여 사용할수있다.(공유 라이브러리???)

3.하나의 라이브러리를 여러프로그램이 사용가능하고,

    각 프로그램은 같은 라이브러리를 사용하기 때문에 메모리 자원이 낭비되지않음

 

단점

1. 동적라이브러리가 없으면 런타임 에러가 뜬다.

2.동적링크는 내 프로그램 영역에서 라이브러리가 호출 되는 곳으로 점프로 왔다 갔다 해야함

   (overhead 발생) 지속적으로 발생하는 자원소모

 

묵시적링크

링커는 묵시정 링크 시 소스코드를 컴파일해서 나온 목적 파일과 동적 라이브러리의

어떤 함수를 사용하겠다는 정보가 합쳐 하나의 실행파일을 만든다.

그래서 프로그램 실행 시 동적 라이브러리의 어떤 함수를 사용하겠다는 정보로 

동적 라이브러리 파일에서 해당 함수를 메모리에 올려 사용한다. (이게 정적링크 아닌가....동적링크안에 정적링크방식...?)

 

명시적 링크

링커는 명시적 링크 시 소스코드를 컴파일해서 나온 목적파일과 동적 라이브러리의 어떤 함수를 사용하겠다는 정보가 없다. 

대신 프로그램 동작 시 소스코드에서 사용한 API 함수로 사용하려는

라이브러리 파일이 있는지 검사하고 동적으로 해당 함수를 메모리에 올린다.(이방식이 진정한 동적링크 인거같은데...)

 

 

 

 

이해 안감...

728x90
반응형
Comments