2013-06-22 60 views
0

動態加載和動態綁定在C++中的主要區別是什麼?動態加載和動態綁定的區別

爲什麼動態加載被稱爲靜態?

+0

你確定你選擇正確的詞嗎?動態加載和動態綁定實際上是一回事。但是,靜態綁定和動態綁定是有區別的。 – Muepe

+0

ya.i在我的書上看到這個詞 – MBMJ

+0

http://stackoverflow.com/questions/6866432/what-are-similarities-and-differences-between-dynamic-loading-and-late-binding –

回答

3

這個問題有幾個方面。如果我們談論關於動態綁定的對象。讓我們考慮以下情況

class Base { 
public: 
    virtual void method() { std::cout << "Base::method" << std::endl; } 
}; 

class Derived : public Base { 
public: 
    virtual void method() { std::cout << "Derived::method" << std::endl; } 
}; 

// .... 

void testMethod(Base* pBase) { 
    pBase->method(); 
} 

函數調用不是在編譯時還不知道,這可能是基地::方法或派生::根據運行時類型PBASE的方法。這就是爲什麼當呼叫實際即將發生時,它的被稱爲dyanmic綁定(或後期綁定)的實際方法調用。

另一方面,我們有動態和靜態加載。這與加載庫有關。一種可能性是創建一個靜態庫 - 一個帶有目標代碼的文件 - 在編譯器編譯並鏈接它時鏈接到您的程序。它在編譯後不能被修改,因爲它的名字來自靜態綁定到你的程序。

如果您要進行動態加載,而不是在編譯時將代碼添加到程序中,請在運行時加載它。不同的操作系統提供了各種方法來實現。對於Windows用戶DLL文件不應該是未知的東西。它們包含目標代碼,當程序請求代碼時,它會加載提供代碼並執行該代碼的DLL。這使您可以添加不同版本的DLL,而無需重新編譯程序(只要簽名和一般行爲保持不變) - 我們可以說它的動態。

+0

好的解釋謝謝兄弟! ! –