作者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
1F:推 millerlai:感谢澄清观念 ^__^,我对Win32不熟 Orz 220.136.84.169 01/22 00:28
2F:推 coolkevin:很清楚 谢谢~ 60.250.197.250 01/22 23:30