2
프로세스가 동적 라이브러리의 함수를 요구하면 전체 라이브러리가 메모리에로드되거나 함수 만로드됩니까? 예를 들어로드 및 동적 연결
: I는 libc의 printf()
에서 어떤 기능 또는 사용할 때 메모리 또는 홀로 단지 printf()
함수로로드 libc의 전체이다 (그것은 동적 라이브러리 가정)?
프로세스가 동적 라이브러리의 함수를 요구하면 전체 라이브러리가 메모리에로드되거나 함수 만로드됩니까? 예를 들어로드 및 동적 연결
: I는 libc의 printf()
에서 어떤 기능 또는 사용할 때 메모리 또는 홀로 단지 printf()
함수로로드 libc의 전체이다 (그것은 동적 라이브러리 가정)?
전체 라이브러리가 메모리에로드되었거나 기능 만로드 되었습니까?
답변은 "메모리에로드되었습니다"라는 의미와 프로그램을 실행하는 운영 체제에 따라 다릅니다.
Linux를 생각해보고 일반적인 연결 인 libc.so
을 생각해 보겠습니다. .data
및 libc.so.6
의 .text
함유있다
PT_LOAD
세그먼트 (이것은
의 .dynamic
섹션
libc.so.6
필요하다는 프로그램이 기록 때문에)에도 실행하는 프로그램의 마지막 명령어 메모리에
mmap()
ED있다.
그 다음 코드는 이고 액세스 할 때을 RAM으로 요청합니다. printf
을 호출하면 printf
에 대한 코드가 들어있는 페이지가 디스크에서 페이징되거나 버퍼 캐시에서 재사용 될 가능성이 있습니다.
"디스크"("디스크에서 페이징 됨)"는 RAM 또는 스왑을 의미합니다. – vanangamudi
@vanangamudi "u"대신 "you"와 같은 단어를 사용하십시오. 아니요, "디스크"는 다음과 같은 종류의 디스크를 의미합니다 : http://en.wikipedia.org/wiki/Hard_disk_drive_platter –