본문 바로가기

리눅스

[draft] 동적 라이브러리와 정적 라이브러리의 차이점

728x90

동적 라이브러리와 정적 라이브러리의 차이점

두 라이브러리의 주요 차이점

1. 링크 시점

정적 라이브러리(Static Library)

  • 컴파일 시점에 프로그램에 포함됩니다.
  • 라이브러리의 코드가 컴파일할 때 실행 파일에 삽입되어 결과적으로 하나의 독립적인 실행 파일이 생성됩니다.

동적 라이브러리(Dynamic Library)

  • 실행 시점에 프로그램이 라이브러리를 참조합니다.
  • 컴파일 시점에는 라이브러리 파일이 포함되지 않고 실행 시에만 해당 라이브러리를 로드하여 사용합니다.

2. 실행 파일 크기

정적 라이브러리

  • 실행 파일에 라이브러리 코드가 포함되므로 실행 파일의 크기가 커질 수 있습니다.

동적 라이브러리

  • 실행 파일에는 라이브러리 참조만 포함되므로 실행 파일 크기가 상대적으로 작습니다.

3. 라이브러리 업데이트 및 배포

정적 라이브러리

  • 라이브러리가 업데이트될 경우 프로그램을 다시 컴파일해야 합니다.
  • 컴파일된 실행 파일은 독립적이기 때문에 배포 시 추가적인 라이브러리 파일을 포함할 필요가 없습니다.

동적 라이브러리

  • 라이브러리만 교체하면 프로그램이 바로 새로운 버전의 라이브러리를 사용할 수 있습니다.
  • 배포 시 실행 파일 외에 라이브러리 파일도 함께 배포해야 합니다.
728x90

4. 메모리 사용

정적 라이브러리

  • 각각의 프로그램이 독립적으로 라이브러리의 코드를 메모리에 로드합니다.
  • 동일한 라이브러리를 사용하는 여러 프로그램이 있다면 그 라이브러리의 복사본이 각 프로그램마다 메모리에 따로 로드됩니다.

동적 라이브러리

  • 하나의 라이브러리가 메모리에 한 번만 로드되고 여러 프로그램이 이를 공유해서 사용합니다.
  • 메모리 사용이 더 효율적입니다.

5. 성능

정적 라이브러리

  • 라이브러리가 이미 실행 파일에 포함되어 있어 프로그램 실행 시점에 추가적인 로드 과정이 없습니다.
  • 일반적으로 실행 성능이 더 빠릅니다.

동적 라이브러리

  • 프로그램 실행 시에 라이브러리를 로드해야 하므로 약간의 로드 시간이 필요합니다.
  • 하지만 메모리를 효율적으로 사용하고 여러 프로그램이 동일한 라이브러리를 공유할 수 있기 때문에 이점이 있을 수 있습니다.

6. 플랫폼에 따른 차이점

정적 라이브러리

  • 각 플랫폼에 맞게 컴파일되기 때문에 플랫폼 간 이동이 어렵습니다.

동적 라이브러리

  • 특정 플랫폼에 맞는 라이브러리 파일만 있다면 프로그램을 재컴파일하지 않고도 다른 시스템에서 사용할 수 있습니다.

7. 비교 표

구분 정적 라이브러리 동적 라이브러리
링크 시점 컴파일 시점에 포함됨 실행 시점에 로드됨
실행 파일 크기 실행 파일이 커짐 실행 파일이 작아짐
라이브러리 업데이트 프로그램을 다시 컴파일해야 함 라이브러리만 교체하면 됨
배포 시 요구 사항 실행 파일만 배포 라이브러리 파일도 함께 배포해야 함
메모리 사용 각 프로그램이 독립적으로 라이브러리를 메모리에 로드 여러 프로그램이 라이브러리를 공유하여 메모리 사용 효율적
성능 빠름 조금 느림 (로드 시간이 있음)
확장장 .a (Linux), .lib (Windows) .so (Linux), .dll (Windows)

 

정적 라이브러리는 독립성과 성능이 중요할 때 동적 라이브러리는 메모리 효율성과 업데이트 용이성이 중요할 때 적합합니다.

 

728x90