為何說濫用呢?
不知所為何事,就是濫用。我看到的狀況是通常都在不知道DLL的好處(或者是壞處)的情況下就決定每個Module都要寫成DLL,以為只要寫成DLL就一定有好處,其實不然。迷思1. 用DLL程式開啓會變快
其實很多在DLL裡用到的東西一開始就用到了,所以代表一開始就得把DLL載入,所以也沒有速度的優勢,反而要付出一些進行Dynamic linking或 Mapping的時間。迷思2. 用DLL程式開啓記憶體會耗的比較少
同上,如果你的程式在一開始就用到了DLL內的東西,這樣一來程式一開啓就會把用到的DLL一一載入,並且因為它是DLL所以就用不到static link時的dead code stripping或類似的功能,所以反而比用static link時所耗費的記憶體多。迷思3. 用DLL程式容易維護
用DLL程式容易維護的主因是倘若DLL裡的程式碼有bug,只要修改與更新系統中的DLL即可。但是我看到的現象都是只要更新就是連主程式全部一起更新(不用重寫Installer,反正也沒有多大等等因素),這當然也都跟規劃有關。事實
用DLL有一個最嚴重的缺點就是C++的Calling Convention不統一,導致用C++當界面的DLL除非用的compiler是同一個版本(或者說用同樣的calling convention去編譯),不然主程式是沒辦法使用的,執行期會跑不起來。所以我個人的看法是,決定要不要用成DLL,請三思而後行,不然吃力不討好,得不償失。
沒有svn external link 的 幫助,哪個dll哪個.h該放哪裡,各個module之間的連動,對剛接觸project的新人來講也是噩夢。
回覆刪除C++的Calling Convention不統一
精闢 !
對我來說module太多對project convert 也是一個噩夢 XD
其實我沒用過dll...暈惹T^T
回覆刪除早晚會用到
回覆刪除補充一下chen曾經貼的
回覆刪除Dll Hell (夠聳動)
http://en.wikipedia.org/wiki/DLL_hell