天天看點

Linux x86_64下程序位址空間布局-vDSO

在上一篇linux x86_64程序記憶體空間布局中談了兩個不同參數下的程序運作時記憶體空間宏觀的分布。也許你會注意到這樣一個細節,在每個程序的stack以上的位址中,有一段動态變化的映射位址段,比如下面這個程序,映射到vdso。

Linux x86_64下程式位址空間布局-vDSO

</blockquote>

如果我們用ldd看相應的程式,會發現vdso在磁盤上沒有對應的so檔案。

不記得曾經在哪裡看到大概這樣一個問題:

getpid,gettimeofday是不是系統調用?

其實這個問題的答案就和vdso有關,雜x86_64和i386上,getpid是系統調用,而gettimeofday不是。

vdso全稱是virtual dynamic shared object,是一種核心将一些本身應該是系統調用的直接映射到使用者空間,這樣對于一些使用比較頻繁的系統調用,直接在使用者空間調用可以節省開銷。如果想詳細了解,可以參考這篇文檔

下面我們用一段程式驗證下:

編譯為可執行檔案後,我們可以用strace來驗證:

繼續閱讀