溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

締造程序兼容的契約(ABI)

發布時間:2020-03-02 12:41:58 來源:網絡 閱讀:1089 作者:三九感冒靈 欄目:系統運維

締造程序兼容的契約(ABI)

1. API是什么?

ABI(application binary interface),指的時應用程序二進制接口。
EABI(embeded application binary interface),指的是嵌入式應用程序二進制接口,和ABI的區別在于應用程序中允許使用特權指令。
ABI廣義上的概率指的是應用程序在二進制層面的規范,狹義上指的是某個硬件/操作系統/虛擬機平臺的規范文檔。

2.ABI和 API的區別:

ABI是二進制層面的規范,而API是源碼層面的規范。兩者沒有直接聯系。
遵循相同ABI的系統,所提供的API可能不同:
相同的不同的系統如Windows和Linux都可以在電腦上安裝,原因是遵循了相同的ABI規范,但是源代碼是不同的,原因API不同。
遵循相同API的系統,所提供的ABI可能不同:
QT應用程序開發后(API相同,源代碼),可以在Windows和Linux上運行,單經過編譯后的可執行文件不同(編譯時遵循的ABI不同)
Java跨平臺原理:
編譯之后的二進制文件相同,通過運行在不同平臺上java虛擬機將其翻譯成對應平臺的可執行程序(翻譯的規則是平臺的ABI規范)。
締造程序兼容的契約(ABI)
QT跨平臺的原理:
相同的源代碼(api),,通過在不同品臺編譯后成為各個品臺的可執行程序(編譯規范遵守了平臺的ABI規范)。
締造程序兼容的契約(ABI)

3. API有什么?

3.1 定義了基礎數據類型的大小

締造程序兼容的契約(ABI)
從這個角度考慮程序的可移植性,只需要將類型適配層做相應修改,使得數據類型滿足平臺規范即可。
締造程序兼容的契約(ABI)

3.2 定義了共用體/結構體的對齊方式

如下面的程序,有兩種對其方式,在Linux中使用的是壓縮存儲。

struct {
    short s : 9;
    int j : 9;
    char c;
    short t : 9;
    short u : 9;
    char d;
} s;

Linux下輸出結果:
締造程序兼容的契約(ABI)
締造程序兼容的契約(ABI)

3.3 定義了硬件寄存器的使用方式

寄存器時處理器用來處理數據的載體,一些寄存器在處理器設計時就規定好了功能。
締造程序兼容的契約(ABI)
X86寄存器的ABI規范:
締造程序兼容的契約(ABI)
Power PC寄存器的ABI規范
締造程序兼容的契約(ABI)

3.4 定義了函數的調用時的約定

當函數調用時,參數會被傳遞給被調用的函數,而返回值會被返回給函數調用者。
調用約定描述參數如何傳遞到棧中以及棧的維護方式:參數的傳遞順序(如從左向右入棧)、調用棧的清理(如被調函數負責清理棧)。
調用約定通常用于調用和庫開發:
締造程序兼容的契約(ABI)

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女