今天就跟大家聊聊有關(guān)什么是python中的ABI,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
在元寶山等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計 網(wǎng)站設(shè)計制作按需網(wǎng)站策劃,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計,網(wǎng)絡(luò)營銷推廣,成都外貿(mào)網(wǎng)站建設(shè)公司,元寶山網(wǎng)站建設(shè)費(fèi)用合理。
ABI是Application Binary Interface的縮寫,應(yīng)用程序二進(jìn)制接口。 一個ABI是不同二進(jìn)制片段的連接紐帶。 它定義了函數(shù)被調(diào)用的規(guī)則:參數(shù)在調(diào)用者和被調(diào)用者之間如何傳遞,返回值怎么提供給調(diào)用者,庫函數(shù)怎么被應(yīng)用,以及程序怎么被加載到內(nèi)存。 因此ABI是用來約束鏈接器的:一個ABI是無關(guān)的代碼如何在一起工作的規(guī)則。 一個ABI也是不同進(jìn)程如何在一個系統(tǒng)中共存的規(guī)則。 舉例來說,在Linux系統(tǒng)中,一個ABI可能定義信號如何被執(zhí)行,進(jìn)程如何調(diào)用syscall,使用大端還是小端,以及棧如何增長。
ABI是系統(tǒng)與應(yīng)用之間的協(xié)議. 一個BINARY(EXEC, LIB)必需符合ABI才能在相應(yīng)的系統(tǒng)上運(yùn)行。比如在PC上不管用什么樣的COMPILER, 只要產(chǎn)生符合LINUX的ELF文件, 用相應(yīng)的INSTRUCTION SET(比如INTEL, PPC, SPARC),就可以在一個LINUX機(jī)器上運(yùn)行, 調(diào)用系統(tǒng)或別人的LIB。
ABI定義了BINARY的文件格式、內(nèi)容、 以及裝載/卸載程序的要求, 函數(shù)調(diào)用時參數(shù)傳遞規(guī)則, 寄存器, 堆棧的使用等。
保持一個穩(wěn)定的 ABI 要比保持穩(wěn)定的 API 要難得多。比如,在內(nèi)核中 int register_netdevice(struct net_device *dev) 這個內(nèi)核函數(shù)原型基本上是不會變的,所以保持這個 API 穩(wěn)定是很簡單的,但它的 ABI 就未必了,就算是這個函數(shù)定義本身沒變,即 API 沒變,而 struct net_device 的定義變了,里面多了或者少了某一個字段,它的 ABI 就變了,你之前編譯好的二進(jìn)制模塊就很可能會出錯了,必須重新編譯才行。
看完上述內(nèi)容,你們對什么是python中的ABI有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。