日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于静态联编和动态联编

發布時間:2024/10/14 编程问答 76 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于静态联编和动态联编 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先什么是聯編?
通俗的來說聯編就是函數調用(操作調用)與執行該操作(函數)的代碼段之間的映射關系。
按照聯編所進行的階段不同可分為靜態聯編和動態聯編
舉個列子

#include<iostream> using namespace std; class A{public:void fun(){cout<<"123"<<endl; } }; class B{public:void fun(){cout<<"123"<<endl; } }; int main() {fun(); }

A和B中都有都有fun()這個函數,現在在主函數里邊調用;
那么A和B里邊fun()就是執行該操作的代碼段
聯編就是決定main函數中的fun()函數調用映射到A中還是B中fun()的過程 ;

靜態聯編
是指聯編工作是在程序編譯連接階段進行的,又被稱為早期聯編;因為這種編聯是在程序開始運行之前完成的;
用上邊例子說靜態聯編就是在編譯的時候就決定了main函數中是調用A中還是B的fun()函數一旦編譯完成,它們的映射關系就唯一確定了
上邊那個例子是不能運行的方便理解,接下來用下一個實例

#include<iostream> using namespace std; class shape{public:void draw(){cout<<"123456"<<endl; }void fun(){draw();} }; class circle:public shape{public:void draw(){cout<<"abcdefg"<<endl;} }; int main() {circle a;a.fun();return 0; }

這里有一個問題,它到底調用的是哪一個draw 函數
結果是,調用shape里邊的;
為什么?
由于沒有另外的數據結構來保存draw的地址,所以程序所知道的也只有fun函數所在的那個類里邊的成員,自然會調用shape里邊的draw;

動態編聯
是指編譯階段并不確切知道將要調用的函數,只有在程序執行時才能確定將要調用的函數,要求聯編工作在程序運行時進行聯編工作稱為動態聯編c++規定動態聯編是在虛函數支持下確定的;
這個也舉個例子

#include<iostream> using namespace std; class shape{public:virtual void draw(){cout<<"123456"<<endl; }void fun(){draw();} }; class circle:public shape{public:void draw(){cout<<"abcdefg"<<endl;} }; int main() {circle a;a.fun();return 0; }

虛函數是動態聯編的基礎
以上函數運行結果會和靜態聯編的那個例子不同就是因為在運行階段會讀到了virtual才會找到派生類的draw
在程序運行時進行關聯或束定調用關系

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的关于静态联编和动态联编的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。