當前位置:首頁 » 編程軟體 » static編譯動態調用

static編譯動態調用

發布時間: 2023-09-13 08:37:08

㈠ 靜態編譯和動態編譯有何不同

靜態編譯與動態編譯的區別:
1、動態編譯的可執行文件需要附帶一個的動態鏈接庫,在執行時,需要調用其對應動態鏈接庫中的命令。
所以其優點一方面是縮小了執行文件本身的體積,另一方面是加快了編譯速度,節省了系統資源。
缺點一是哪怕是很簡單的程序,只用到了鏈接庫中的一兩條命令,也需要附帶一個相對龐大的鏈接庫;二是如果其他計算機上沒有安裝對應的運行庫,則用動態編譯的可執行文件就不能運行。
2、靜態編譯就是編譯器在編譯可執行文件的時候,將可執行文件需要調用的對應動態鏈接庫(.so)中的部分提取出來,鏈接到可執行文件中去,使可執行文件在運行的時候不依賴於動態鏈接庫。所以其優缺點與動態編譯的可執行文件正好互補。

㈡ 動態鏈接,靜態鏈接 動態編譯,靜態編譯 動態鏈接庫,靜態鏈接庫 這些兩兩間的區別是什麼呢

有點兒亂……,分數少簡單扼要的說說吧。
————————————
首先,傳統的編譯,也就是靜態編譯是把 源文件 翻譯成目標文件,這個是一次性過程,也就是你所謂的靜態編譯。
後來的Java和.NET等語言,首先編譯成中間形式,然後運行過程中根據需要編譯成本地代碼(注意這個過程不是一次性的,下次運行重新編譯),這個就是JIT(即時編譯)技術,從即時編譯發展出了動態編譯技術
————————————
(傳統的)編譯完成後,像C/C++、Fortran、匯編等語言,可以把多個目標文件合並到一個庫文件中,這個就是靜態庫。比如常說的庫函數printf就是libc裡面的函數。
如果有了啟動函數(main),main裡面使用了printf,就可以通過靜態鏈接技術,從libc中提取出printf所在的文件加入到可執行文件中,如果printf還需要其它函數,就繼續搜索並加入列表,直到形成一個閉包。這個就是靜態鏈接。
可是靜態鏈接有個明顯的缺點,如果每個程序都需要printf,那麼printf這個函數的代碼就會同時存在在每個程序中,這樣也太佔地方了吧。所以發明了動態連接技術,其實有兩種形式。無論哪一種,都是首先記錄下需要調用printf這個函數以及所在的動態庫,等到運行的時候再載入動態庫,從動態庫中找到真正的printf去執行。
由於,動態鏈接技術需要一些額外的信息,傳統的靜態庫是不具備的,這些額外信息主要是重復載入和卸載時所需要的一些代碼,因此需要動態鏈接庫。

c語言static的作用和用法

static在c語言中是私有、靜態意思。

用於在函數中聲明「靜態變數」用,在每一次調用後,該變數並不在函數返回時立即釋放,變數中保存的值,可以保留到下一次調用時繼續有效。

私有就是隱藏。static函數只能聲明後的本文中調用。static全局變數只能聲明後的本文中調用。static局部變數只能聲明後的本函數調用

靜態就是一直存在,相對於每次調用動態分配而言。static函數未驗證是否每次調用代碼地址都是一致的。static全局變數生命周期到程序或進程結束。static局部變數生命周期到程序或進程結束。

static的使用和作用

靜態全局變數。全局變數前加static,修飾全局變數為靜態全局變數,改變全局變數的可見性。靜態局部變數。局部變數前加static,修飾局部變數為靜態局部變數,改變局部變數的銷毀時期。靜態函數。函數返回類型前加static,修飾函數為靜態函數,改變函數的可見性。

類的靜態成員。類成員前加static,修飾類的成員為類的靜態成員,實現多個對象之間的數據共享,並且使用靜態成員不會破壞封裝性,也保證了安全性。類的靜態函數,類函數前加static,修飾類的函數為靜態函數,減少資源消耗,不需要實例化就可以使用。

熱點內容
伺服器主板是什麼樣子 發布:2024-11-19 12:08:19 瀏覽:888
奧迪配置怎麼比較 發布:2024-11-19 12:07:33 瀏覽:521
連接共享列印機無許可權訪問許可權 發布:2024-11-19 12:04:01 瀏覽:294
大眾速騰車載carplay安卓怎麼連接 發布:2024-11-19 11:57:12 瀏覽:514
電腦軟體用戶密碼是什麼 發布:2024-11-19 11:51:25 瀏覽:913
java循環break 發布:2024-11-19 11:50:50 瀏覽:844
提高上傳網速 發布:2024-11-19 11:50:49 瀏覽:434
本田crv配置怎麼分 發布:2024-11-19 11:50:46 瀏覽:116
百度文庫net源碼 發布:2024-11-19 11:50:46 瀏覽:164
薄荷路由器初始登錄密碼是多少 發布:2024-11-19 11:50:00 瀏覽:697