※ 아래는 윤성우 뇌를 자극하는 윈도우즈 프로그래밍 한빛미디어(주) 2022년
Chapter21(p.719 ~ 753)를 읽고 정리한 내용입니다.
#include <stdio.h>
int main(void)
{
printf("Hello, World! \n");
return 0;
}
#include <stdio.h>에는 printf 함수의 선언만 존재하고 정의는 존재하지 않는다.
printf 함수의 바이너리는 어디에 있을까?
-> 호출 가능한 printf 함수는 라이브러리(Library)안에 있다.
여러 프로그램에서 자주 사용하는 함수와 데이터들을 실행이 가능한 바이너리 형태로 묶어놓은 파일
-> 라이브러리가 실행파일 안에 포함된다.
실행파일이 처음 만들어질 때 부터 하나로 묶이는 형태의 라이브러리를 정적 라이브러리라 한다.
라이브러리 코드를 완전히 포함해서 .exe 파일을 생성하는 형태의 링크를 정적 링크라 한다.
<정적 링크의 장점>
-> 실행의 독립성 : 실행 파일만 있으면 언제 어디에서건 실행 가능하다.
<정적 링크의 단점>
-> 메모리 공간을 많이 차지한다.
DLL(Dynamic Linking Library)
모든 실행파일이 동일한 라이브러리를 포함하고 있기 때문에 정적 라이브러리를 사용하면
그만큼 메모리 공간을 더 차지하게 된다.
오른쪽과 같이 동일하게 포함하는 라이브러리를 별도로 저장한 다음 공유하는 방식을
동적 라이브러리라 한다.
DLL은 실행파일 안에 포함되지 않고, 프로그램 실행 시에 참조되므로 실행파일의 크기가 작다.
또한, 물리 메모리에 한번 올라간 DLL은 둘 이상의 프로세스가 각각 자신의 가상 메모리에
매핑해서 공유하는 구조를 지니기 때문에 메모리 사용에 대한 효율성이 높다.