您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關什么是python中的ABI,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
ABI是Application Binary Interface的縮寫,應用程序二進制接口。 一個ABI是不同二進制片段的連接紐帶。 它定義了函數被調用的規則:參數在調用者和被調用者之間如何傳遞,返回值怎么提供給調用者,庫函數怎么被應用,以及程序怎么被加載到內存。 因此ABI是用來約束鏈接器的:一個ABI是無關的代碼如何在一起工作的規則。 一個ABI也是不同進程如何在一個系統中共存的規則。 舉例來說,在Linux系統中,一個ABI可能定義信號如何被執行,進程如何調用syscall,使用大端還是小端,以及棧如何增長。
ABI是系統與應用之間的協議. 一個BINARY(EXEC, LIB)必需符合ABI才能在相應的系統上運行。比如在PC上不管用什么樣的COMPILER, 只要產生符合LINUX的ELF文件, 用相應的INSTRUCTION SET(比如INTEL, PPC, SPARC),就可以在一個LINUX機器上運行, 調用系統或別人的LIB。
ABI定義了BINARY的文件格式、內容、 以及裝載/卸載程序的要求, 函數調用時參數傳遞規則, 寄存器, 堆棧的使用等。
保持一個穩定的 ABI 要比保持穩定的 API 要難得多。比如,在內核中 int register_netdevice(struct net_device *dev) 這個內核函數原型基本上是不會變的,所以保持這個 API 穩定是很簡單的,但它的 ABI 就未必了,就算是這個函數定義本身沒變,即 API 沒變,而 struct net_device 的定義變了,里面多了或者少了某一個字段,它的 ABI 就變了,你之前編譯好的二進制模塊就很可能會出錯了,必須重新編譯才行。
看完上述內容,你們對什么是python中的ABI有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。