공유 라이브러리.
기존의 같은 함수를 다른 함수들이 그것을 공통적으로 사용할 경우 필요할 때만 받아서
사용하는 방법이다.
장점- 용량을 줄일 수 있다. (아래그림은 참고), 모든 프로그램을 다시 링크하지 않아도
라이브러리를 새 버전으로 대체 가능.
단점- 어떤 라이브러리가 갱신되거나, 처음 실행될때 버전이 맞지 않거나 공유 라이브러리
함수가 처음 호출될 때 실행파일이 생성되지 않을 때가 있다.(예 xp에서 도스게임이 잘 돌아가지 않는 경우)
DLL=DYNAMIC(동적인) LIBRARY(라이브러리) LINK(링크)
다음은 공유라이브러리를 실행해서 컴파일 할 때와 안 할 때의 차이를 나타낸다.
1. 제일 위에 빨간색은 공유라이브러리를 사용한것.
2. 두번 째 빨간네모는 공유라이브러리를 사용하지 않았다.
(gcc -static -o 실행파일 실행파일 소스)
3. 노란색 네모는 메모리 영역별로 소스의 용량크기를 나타낸다. 참고로 text는 stack영역.
다음 예제는 setjmp()함수와 longjmp()함수 소스
1. setjmp인자는 jmp_buf형 위에서는 전역변수로 버퍼를 선언하여 인자를 넣었다.
setjmp함수는 직접호출되면 0을 반환하므로, 실행되지 않는다.
그래서 else문에 void 형 함수 one을 호출
2. one()함수안에 two()함수를 호출하고 실행한다. 그런데 longjmp()함수를 만난다.
longjmp()로 인하여 main()함수로 점프한다. 그러니까 아래 printf("two end\n");를
실행되지 않는다.
3. longjmp함수에 두번째 인자가 1이므로 setjmp함수로 가서 if문이 성립되어 아래 코드를 실행한 뒤
종료된다.
실행결과
'unix > unix 실습' 카테고리의 다른 글
9월 9일 (0) | 2013.09.09 |
---|---|
9월 2일 파일과 디렉토리1.(정리 미완성) (0) | 2013.09.02 |