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