[問題] 動態連結和靜態連結的執行速度

看板C_and_CPP (C/C++)作者 (00)時間16年前 (2009/07/07 00:22), 編輯推噓3(3018)
留言21則, 3人參與, 最新討論串1/2 (看更多)
同一段 function code 分別使用兩種不同呼叫 a.AP 使用 static link 呼叫 b.寫成dll, AP 呼叫 dll 來執行 請問兩者的執行速度會有差異嗎? 會因為使用的連結方式不同,變慢嗎? THX~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.233.250.201

07/07 00:47, , 1F
如果只呼叫一次 差距不大 如果呼叫多次 就要看呼叫的方式
07/07 00:47, 1F

07/07 00:48, , 2F
如果每次呼叫完成就釋放 要呼叫就在讀一次 這樣就會有比較多
07/07 00:48, 2F

07/07 00:49, , 3F
時間差 一般來說static一定會比較快 厲害點的編譯器
07/07 00:49, 3F

07/07 00:50, , 4F
還會讓你常用的Function盡量放在code cache中 會快很多
07/07 00:50, 4F

07/07 01:12, , 5F
那為什麼 dynamic linked code 不能做這種最佳化?
07/07 01:12, 5F

07/07 01:13, , 6F
Compile 的時候,compiler 不知道 dynamic or static
07/07 01:13, 6F

07/07 01:13, , 7F
那是 link 的時候才知道的
07/07 01:13, 7F

07/07 01:25, , 8F
memory在讀是以page為單位 時常一起用的一系列function
07/07 01:25, 8F

07/07 01:26, , 9F
放在附近 會有好處
07/07 01:26, 9F

07/07 01:27, , 10F
static你可以控制要載入到哪塊連續的記憶體
07/07 01:27, 10F

07/07 01:28, , 11F
把時常一同使用的functuion 放在附近的記憶體中
07/07 01:28, 11F

07/07 01:29, , 12F
因為是事先分配的
07/07 01:29, 12F

07/07 01:29, , 13F
但動態的方式 Loadlibrary你並不能指定要讀到哪裡
07/07 01:29, 13F

07/07 01:30, , 14F
動態載入除非你自己寫以個Loadlibrary (這種事我做過)
07/07 01:30, 14F

07/07 01:31, , 15F
可以載入到一大段你要的空間中
07/07 01:31, 15F

07/07 01:35, , 16F
才能用到cache的好處吧
07/07 01:35, 16F

07/07 01:49, , 17F
那得要一起 compile 才行吧 ? 分別 compile 成 obj 再 link
07/07 01:49, 17F

07/07 01:49, , 18F
似乎沒能用到這樣的好處 ?
07/07 01:49, 18F

07/07 10:28, , 19F
不用一起編譯 Link可以控制static要載入到哪個區段的記憶體中
07/07 10:28, 19F

07/07 10:28, , 20F
事先先分配好
07/07 10:28, 20F

07/07 11:57, , 21F
那你怎麼會知道哪些要放在一起? @@ 你並不知道使用時的情況
07/07 11:57, 21F
文章代碼(AID): #1AKYIt-Q (C_and_CPP)
文章代碼(AID): #1AKYIt-Q (C_and_CPP)