关于静态联编和动态联编
首先什么是聯(lián)編?
通俗的來說聯(lián)編就是函數(shù)調(diào)用(操作調(diào)用)與執(zhí)行該操作(函數(shù))的代碼段之間的映射關(guān)系。
按照聯(lián)編所進(jìn)行的階段不同可分為靜態(tài)聯(lián)編和動態(tài)聯(lián)編
舉個列子
A和B中都有都有fun()這個函數(shù),現(xiàn)在在主函數(shù)里邊調(diào)用;
那么A和B里邊f(xié)un()就是執(zhí)行該操作的代碼段
聯(lián)編就是決定main函數(shù)中的fun()函數(shù)調(diào)用映射到A中還是B中fun()的過程 ;
靜態(tài)聯(lián)編
是指聯(lián)編工作是在程序編譯連接階段進(jìn)行的,又被稱為早期聯(lián)編;因?yàn)檫@種編聯(lián)是在程序開始運(yùn)行之前完成的;
用上邊例子說靜態(tài)聯(lián)編就是在編譯的時候就決定了main函數(shù)中是調(diào)用A中還是B的fun()函數(shù)一旦編譯完成,它們的映射關(guān)系就唯一確定了
上邊那個例子是不能運(yùn)行的方便理解,接下來用下一個實(shí)例
這里有一個問題,它到底調(diào)用的是哪一個draw 函數(shù)
結(jié)果是,調(diào)用shape里邊的;
為什么?
由于沒有另外的數(shù)據(jù)結(jié)構(gòu)來保存draw的地址,所以程序所知道的也只有fun函數(shù)所在的那個類里邊的成員,自然會調(diào)用shape里邊的draw;
動態(tài)編聯(lián)
是指編譯階段并不確切知道將要調(diào)用的函數(shù),只有在程序執(zhí)行時才能確定將要調(diào)用的函數(shù),要求聯(lián)編工作在程序運(yùn)行時進(jìn)行聯(lián)編工作稱為動態(tài)聯(lián)編c++規(guī)定動態(tài)聯(lián)編是在虛函數(shù)支持下確定的;
這個也舉個例子
虛函數(shù)是動態(tài)聯(lián)編的基礎(chǔ)
以上函數(shù)運(yùn)行結(jié)果會和靜態(tài)聯(lián)編的那個例子不同就是因?yàn)樵谶\(yùn)行階段會讀到了virtual才會找到派生類的draw
在程序運(yùn)行時進(jìn)行關(guān)聯(lián)或束定調(diào)用關(guān)系
總結(jié)
以上是生活随笔為你收集整理的关于静态联编和动态联编的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++职工信息管理系统
- 下一篇: 数据结构基础概念及算法概念