우리가 작성한 C 코드는 다음의 과정을 거쳐서 실행파일이 된다.
작성한 코드(.c)가 컴파일러에 의해 오브젝트 파일(.obj)이 되고
링커에 의해 라이브러리와 링크되어 실행파일(.exe)이 만들어진다.
우리가 프로그램을 만들 때 수 많은 함수를 사용하게 된다.
printf, scanf 등 이렇게 많은 함수들을 일일이 정의 할 수 없으니 만들어 놓은게
stdio.h 와 같은 라이브러리 이다.
이 라이브러리를 링크하는 모양에 따라 동적이냐 정적이냐가 나뉘게 된다.
그림으로 먼저 보자.
우리가 별도의 설정 없이 프로그램을 만들면 동적 라이브러리(DLL : Dynamic Link Library) 방식으로 만들어진다.
실행파일이 만들어지고 라이브러리가 연결되어서 필요 시 접근해서 가져다 쓰는 방식이다.
즉 .exe 파일과 .dll 파일이 모두 필요한 것이다.
dll 파일이 없으면 프로그램을 실행할 수 없다.
정적 라이브러리(Static Link Library) 는 dll 처럼 연결되어 있는 것이 아니라
라이브러리가 아예 .exe 안에 들어가 있는 형태이다.
때문에 .exe 만 실행시켜도 프로그램이 돌아간다.
동적, 정적 모두 가상메모리가 할당 된다.
하지만 동적 방식은 실제 라이브러리가 아닌 dll 과 연결되어 있는 것이고(마치 포인터처럼?)
정적 방식은 라이브러리가 각각의 실행파일에 독립적으로 가상메모리를 채우고 있다는 차이점이 있다.
각각의 장단점이 있다.
동적 라이브러리는 exe 파일의 크기는 작다는 장점이 있지만 dll 파일이 없으면 안된다는 단점이 있고
정적 라이브러리는 exe파일만 있어도 실행이 되고 속도가 빠르다는 장점이 있지만 크기가 커진다는 단점이 있다.
도움이 되었다면 아래에 하트 눌러주기~
'개념' 카테고리의 다른 글
REST란? REST가 뭔데? (0) | 2024.01.05 |
---|---|
의존성(Dependency)과 의존성 주입(Dependency Injection) 간단하게 이해하기 (0) | 2022.09.29 |
온프레미스(On-premise)와 클라우드 (0) | 2022.09.20 |
Apache, Nginx, Tomcat, 웹서버, WAS, 정적컨텐츠, 동적컨텐츠 (0) | 2022.09.19 |
댓글