作者WPC001 ()
站內Programming
標題Re: [問題] java與C++ 關於inner class載入記憶體ꐠ…
時間Thu Jan 22 00:05:24 2009
※ 引述《millerlai (Scent of Love)》之銘言:
: Q2,Answer:
: C++應該是與編譯器的參數設定有關(static or dynamic link),若在win32平台它會為
: 一個.cpp檔案產生一個.obj檔。若你設定為 Dynamic Link編譯為執行檔時,在執行程
: 式時,它應該只記錄所需的Symbol資訊,在執行期需要的時候才載入所需的.obj檔案。
: 而這些obj檔案在win32平台上,需要編譯為.dll檔。之後會透過OS提供的System
: Loadlibrary的方式,做動態函式庫的載入。反之,static link就會直接都載入,當然
: 執行檔也會跟著變大。這要請C++的專家來回答XD
幫忙更正一下,
1. obj/lib並不是在執行期才載入, 編譯連結時就會弄進去
2. C++並沒有真正所謂Dynamic Link, 所謂的Dynamic Link是靠PE弄出來的
執行Win32程式時, 程式載入器會先讀取關於import DLL的資訊
並且使用LoadLibary / GetProcAddress這些函數把真實的函數載入到記憶體,
並在對應的位置填入表格
所以編譯器才會有 __declspec(dllexport) 與 __declspec(dllimport) 的宣告方式
要寫DLL必須把function宣告成 __declspec(dllexport)
等到要使用別人的函數時, 要改成__declspec(dllimport) 做宣告
不然就得自己使用LoadLibrary / GetProcAddress這些函數來自己搞了...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.195.61.174
推 millerlai:感謝澄清觀念 ^__^,我對Win32不熟 Orz 220.136.84.169 01/22 00:28
推 coolkevin:很清楚 謝謝~ 60.250.197.250 01/22 23:30