본문 바로가기

Today I Learned

23. 05. 15 - 정적 라이브러리와 동적 라이브러리 외

d3dx 헤더는 무겁다.

 

현재 directx9로 프로젝트를 진행하고 있는데 directx9관련 <d3d9.h>와 <d3dx9.h> 헤더를 사용하고 있다.

이 둘의 차이는 무엇일까? d3d9는 directx9의 기본적인 기능을 담고 있고 d3dx9는 그것을 활용해 개발하는데 사용할 수 있도록 만든 범용적인 기능들의 집합이다. 하지만 지금은 d3dx 시리즈의 헤더 사용을 microsoft에서 권장하지 않는다.

왜냐하면 범용적인 기능들을 한번에 담은만큼 프로그램이 무거워지고 퍼포먼스가 느려지기 때문이다. 그래서 microsoft에서는 directx11 이후로 기능들을 세분화해서 기능별로 라이브러리를 제공하고 있다.

 

 

 

정적 라이브러리와 동적 라이브러리

 

정적 라이브러리  동적 라이브러리(DLL)
lib 파일 생성  lib, dll 파일 생성 
구현한 함수의 구현부를 exe에 함께 담는다  구현한 함수의 구현부를 dll에 담는다
dll파일의 어디를 호출해야 하는지 담긴 링커가 exe에 포함
함수 호출 속도 빠름 함수 호출 속도 느림
라이브러리 업데이트 시 exe파일이 새로 만들어져야 하기 때문에 전체 재빌드해야 함  라이브러리 업데이트 시 구현부만 바뀌었다면
dll만 교체하면 됨 
exe파일 커짐 exe파일, dll파일 작음
다수 프로젝트에서 각 프로젝트에 메모리 할당 다수 프로젝트에서 각 프로젝트가 내용을 공유 

 

 

 

사용자 정의 자료형 

 

프로젝트에서 기본자료형을 typedef를 이용해 사용자 정의 자료형으로 정의할 때가 있다. 왜 그럴까?

운영체제 32비트, 64비트에 따라 자료형의 크기가 달라지는 자료형들이 있다. (long, pointer, size_t) 

그럴 때는 운영체제에 따라 자료형을 바꿔줘야 하는데 이미 작성한 자료형들을 한땀 한땀 바꾸는 것은 쉬운 일이 아니다. 그래서 사용자 정의 자료형으로 정의해놓으면 한꺼번에 바꿔야 할 때 바꾸기 용이하다.