개발_기록용

[컴퓨터 밑바닥의 비밀 내용정리] 1.5 정적 라이브러리와 정적 링크 본문

Computer Science

[컴퓨터 밑바닥의 비밀 내용정리] 1.5 정적 라이브러리와 정적 링크

나폴나폴 2025. 2. 7. 17:58
728x90

0. 들어가며


  • 굉장히 감명깊게 읽었던 [컴퓨터 밑바닥의 비밀] 책의 내용을 돌아보기 위해 정리글을 작성한다.
  • 전공자로 어느정도 안다고 생각한 내용들에서도 부족한 부분이 보여 책을 다시 읽어보며 정리하고자 한다.

https://link.coupang.com/a/cdaqFv

 

컴퓨터 밑바닥의 비밀:컴퓨터 시스템의 본질을 알면 코드의 실마리가 보인다 - 보안과 해킹 | 쿠

쿠팡에서 4.3 구매하고 더 많은 혜택을 받으세요! 지금 할인중인 다른 3 제품도 바로 쿠팡에서 확인할 수 있습니다.

www.coupang.com

 

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
(본문 소개 링크로 도서 구입 시 일정액의 수수료를 제공받습니다.)


1. 주제

우선 정적 라이브러리를 생성하는 과정은 다음과 같다.

 

이렇게 정적 라이브러리를 쓰면, 미리 컴파일된 정적 라이브러리는 다시 컴파일할 필요가 없으니이후 실행파일 생성시 내 코드만 컴파일하고 정적 라이브러리는 링크 과정에서 그대로 실행파일에 복제된다.

 

 

  이 과정을 정적 링크 과정이라 한다.

 

즉, 코드가 의존하는 외부 코드를 매번 컴파일 안 해도 되니

컴파일 속도가 빨라지게 된다.

 

2. 정적 링크의 과정

정적 링크는 결국 여러 대상 파일을 한 데 모아

각각의 대상 파일에서 데이터 영역과 코드 영역을 결합해 실행 파일을 만드는 것이다.

 

 

*실행파일에도 코드 영역, 데이터 영역이 있어 대상 파일과 유사해보이지만,

특수한 심벌인 _start가 있으며, CPU는 이 심벌 주소에서 프로그램을 실행하는데 필요한 기계 명령어를 찾는다.

(이 기계 명령어를 실행해야 우리가 작성한 main 함수를 실행한다.)

 

3. 단점

근데, 정적 링크는 라이브러리를 실행파일에 직접 복사하므로

C 표준 라이브러리처럼 거의 모든 프로그램에 적용되는 표준 라이브러리를 쓰면

정적 링크로 생성된 실행 파일은 모두 동일한 코드와 데이터의 복사본을 갖는다.

 

(만약 정적 라이브러리 크기가 2MB이고 실행 파일 500개면 1GB 크기 데이터가 중복 데이터로 구성됨)

 

  이는 디스크, 메모리를 심각하게 낭비한다.

 

  그래서 이 문제를 해결하고자 동적 라이브러리를 사용한다! (.dll 파일)

반응형
Comments