2013-02-16 2 views
2

프로세스가 동적 라이브러리의 함수를 요구하면 전체 라이브러리가 메모리에로드되거나 함수 만로드됩니까? 예를 들어로드 및 동적 연결

: I는 libc의 printf()에서 어떤 기능 또는 사용할 때 메모리 또는 홀로 단지 printf() 함수로로드 libc의 전체이다 (그것은 동적 라이브러리 가정)?

답변

1

전체 라이브러리가 메모리에로드되었거나 기능 만로드 되었습니까?

답변은 "메모리에로드되었습니다"라는 의미와 프로그램을 실행하는 운영 체제에 따라 다릅니다.

Linux를 생각해보고 일반적인 연결 인 libc.so을 생각해 보겠습니다. .datalibc.so.6.text 함유있다

전체 PT_LOAD 세그먼트 (이것은 .dynamic 섹션 libc.so.6 필요하다는 프로그램이 기록 때문에)에도 실행하는 프로그램의 마지막 명령어 메모리에 mmap() ED있다.

그 다음 코드는 이고 액세스 할 때을 RAM으로 요청합니다. printf을 호출하면 printf에 대한 코드가 들어있는 페이지가 디스크에서 페이징되거나 버퍼 캐시에서 재사용 될 가능성이 있습니다.

+0

"디스크"("디스크에서 페이징 됨)"는 RAM 또는 스왑을 의미합니다. – vanangamudi

+0

@vanangamudi "u"대신 "you"와 같은 단어를 사용하십시오. 아니요, "디스크"는 다음과 같은 종류의 디스크를 의미합니다 : http://en.wikipedia.org/wiki/Hard_disk_drive_platter –