Re: [問題] 動態連結和靜態連結的執行速度
看板C_and_CPP (C/C++)作者littleshan (我要加入劍道社!)時間16年前 (2009/07/07 10:13)推噓1(1推 0噓 2→)留言3則, 3人參與討論串2/2 (看更多)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.233.250.201
→
07/07 00:47,
07/07 00:47
→
07/07 00:48,
07/07 00:48
→
07/07 00:49,
07/07 00:49
→
07/07 00:50,
07/07 00:50
推
07/07 01:12,
07/07 01:12
→
07/07 01:13,
07/07 01:13
→
07/07 01:13,
07/07 01:13
→
07/07 01:25,
07/07 01:25
→
07/07 01:26,
07/07 01:26
嗯 virtual memory 被 swap 到硬碟時
的確是以 page 為單位啦
但 cache 到 memory 之間,是以 cache line 為單位的
目前流行的 CPU 其 cache line 通常是 64 byte
而這個大小 要同時放進多個 function code 是滿難的
更小的 function 使用 inline 還比較容易提升效率
→
07/07 01:27,
07/07 01:27
→
07/07 01:28,
07/07 01:28
→
07/07 01:29,
07/07 01:29
→
07/07 01:29,
07/07 01:29
→
07/07 01:30,
07/07 01:30
→
07/07 01:31,
07/07 01:31
→
07/07 01:35,
07/07 01:35
首先,dynamic linking 和 dynamic loading 是兩回事
你說的 LoadLibrary 是 dynamic loading
接著,先不論 cache line 夠不夠塞下許多一同被使用的 function
若想實現這樣的 optimization
compiler 勢必要知道哪些 function 比較常用
這樣它才能把它們放在一起
但是在你編 library 的時候,compiler 不知道 client 會呼叫哪些 function
所以也很難重新安排 function 的位置
linker 是否能做這種最佳化?也許可以
但我想真正這麼做的 linker 或許不多
因為這會大幅增長 link 時間,得到的效率改善卻微乎其微
最後,使用 dynamic link library 其實有一個好處
那就是若許多執行檔用到同一個 library
那麼 OS 並不需要重覆載入相同的資料
可以讓這些 code 在同一塊記憶體中給每個 process 共享
而且這些 code 因為同時被許多 process 共用
讓它們更有機會進入 cache 當中
所以 static library 和 dynamic library 哪個比較快?
我想答案是不一定
但在一般的 PC 上差距不會太大就是了
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.87.151.2
推
07/07 10:34, , 1F
07/07 10:34, 1F
→
07/07 11:58, , 2F
07/07 11:58, 2F
→
07/07 14:10, , 3F
07/07 14:10, 3F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
3
21
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章