2013-02-16 129 views
2

當一個進程需要動態庫中的函數時,是將整個庫加載到內存中還是隻加載函數?加載和動態鏈接

例如: 當我使用printf()或任何函數從libc的(假設它是一個動態庫),被加載到內存或只是printf()單獨功能的整體的libc?

回答

1

是整個庫加載到內存中還是隻是函數單獨加載?

答案取決於您「加載到內存」中的意思,以及您在哪個操作系統上運行程序。

讓我們考慮一下Linux,並且典型地鏈接到libc.so

有,含.datalibc.so.6.text整個PT_LOADmmap()編入程序的第一條指令之前內存甚至執行(因爲你的程序會記錄它需要在其.dynamic部分libc.so.6)。

從此,代碼需求調頁當你訪問它。當您撥打printf時,包含代碼爲printf的頁面將從磁盤中分頁,或者(更可能)從緩衝區高速緩存中重新使用。

+0

作者:「disk」(「paged in from disk」)u表示內存或交換。 – vanangamudi 2013-05-06 20:28:14

+0

@vanangamudi請使用整個單詞,如「你」而不是「你」。不,通過「磁盤」我的意思是這種磁盤:http://en.wikipedia.org/wiki/Hard_disk_drive_platter – 2013-05-06 22:07:27