1. 라이브러리와 printf!
: 헤더파일에는 함수에 대한 선언만 들어있지 실행가능한 바이너리 코드가 들어있지는 않다.
: 해답은 라이브러리(Library) 안에 있다. 라이브러리란 여러 프로그램에서 자주 사용하는 함수와 데이터들을 실행이 가능한 바이너리 형태로 묶어놓은 파일을 의미한다.
: printf의 경우 C 런타임 라이브러리(C Run-Time Library)에 있다.
* 라이브러리 작성에 대한 동기
: 사용될 소지가 높은 함수들을 라이브러리로 구성하면 편리할 것이다.
* 라이브러리 작성
: 정적라이브러리로 프로젝트를 만들자
- 라이브러리 함수의 입력
: .h(헤더파일)과 .cpp 파일을 만들자
: .lib 파일이 만들어질 것이다.
Tip
실행파일이 생성되는 3가지 단계(전처리->컴파일->링크)에 대한 이해, 특히 링크 과정에서 하는 일이 무엇인지 확실히 이해한다.
헤더 파일 include가 지니는 의미와 헤더파일 안에 들어가는 일반적인 선언들이 무엇인지를 이해한다.
헤더파일을 정의하는 이유와 정의했을 때 얻게 되는 이점을 이해한다.
* Static Library
: 우리가 만든 라이브러리는 링커에 의해 실행파일안에 포함되게 된다.(이 과정을 링크라고 한다.)
: 처음 만들어질 때부터 하나로 묶이게 되고 이러한 형태의 라이브러리를 가리켜 정적 라이브러리라고 한다.
* 동적라이브러리 DLL(Dynamic Linking Library)
: 링커는 링크 과정을 통해서 실행 파일을 생성해낸다. 확장자로 .exe를 갖는 실행파일을 만들어 내기도 하지만, .dll을 지니는 라이브러리를 만들어 내기도 한다. 이것이 DLL이라고 불리는 라이브러리다.
* DLL 과 정적 라이브러리의 차이점
: 정적라이브러리와 DLL은 모두 라이브러리라는 점에서는 동일하다. 하지만, 정적 라이브러리는 정적인 특성을 가지고 DLL은 동적인 특성을 가진다.
: 실행가능한 프로그램에서 라이브러리를 가져다 쓰는 방법에 따른 차이점이다.
- 정적 라이브러리의 특성
: 라이브러리 코드를 완전히 포함해서 .exe파일을 생성하는 형태의 정적 링크를 통하기 때문에 "실행의 독립성"을 가진다.
: 실행파일만 있으면 어디서든지 실행가능하다.
: 메모리 공간을 많이 차지하기 때문에 비효율적이다.
- DLL의 특성
: 프로세스를 여러개 실행시켰을 때 그 차이는 두드러 지게 된다.
: 메인메모리에서 페이지 단위로 DLL이 공유되기 때문에 컨텍스트 스위칭 부분에 있어서 효율이 극대화 된다.
: DLL에서 lib 파일은 링크할 떄 필요하고, dll 파일은 실행할 때 필요하다.
* DLL 제작 : 암묵적 연결
-DLL과 extern 선언
: C언어는 상관 없지만, C++은 컴파일 과정에서 Name Mangling(이름을 엉망으로 만든다는 의미) 작업을 하기 때문에 함수의 이름이 규칙에 따라 이상하게 변경되버린다.
: 이러한 작업을 막기 위해서는 .cpp, .h파일에 extern 명령어를 추가하여야 한다.
* DLL 제작 : 명시적 연결
: 소스코드 내에 DLL 연결 코드가 명시적으로 존재하는 방법이다.
: lib 파일이 필요 없다.
장점 1. : DLL이 필요한 시점에서 로딩하고, 불필요해지면 반환하기 때문에 메모리가 절약된다.
장점 2. : 프로그램 실행 중에 DLL 교체 및 선택이 가능하다.
장점 3. : 프로그램 실행 전에 로드하지 않기 때문에 실행시간을 단축시킬 수 있고, DLL 로딩에 걸리는 시간을 분산시킬 수 있다.
* 한번이상 로드될 수 있는 DLL
: 가상메모리 주소가 서로 다른 프로세스일 경우 두번 로딩되게 된다.
3. 도대체 헤더파일을 몇개나 만들 작정이야!
: 암묵적, 명시적, C 컴파일러, C++컴파일러용 으로 헤더를 만들려면 최소 3개의 헤더가 필요하다.
* 하나의 헤더파일로 모두 지원하기
: #ifdef 명령어
|
'독후감 > 컴퓨터구조+운영체제+시스템프로그래밍' 카테고리의 다른 글
20. 메모리 관리(Virtual Memory, Heap, MMF) (0) | 2017.03.14 |
---|---|
19. 비동기 I/O와 APC (0) | 2017.03.13 |
18. 파일 I/O와 디렉터리 컨트롤 (0) | 2017.03.13 |
17. 구조적 예외처리(SEH)기법 (0) | 2017.03.13 |
16. 컴퓨터구조에 대한 네번쨰 이야기 - Part4 메모리 관리와 I/O (2) | 2017.03.11 |