ABI(application binary interface),指的時應(yīng)用程序二進制接口。
EABI(embeded application binary interface),指的是嵌入式應(yīng)用程序二進制接口,和ABI的區(qū)別在于應(yīng)用程序中允許使用特權(quán)指令。
ABI廣義上的概率指的是應(yīng)用程序在二進制層面的規(guī)范,狹義上指的是某個硬件/操作系統(tǒng)/虛擬機平臺的規(guī)范文檔。
ABI是二進制層面的規(guī)范,而API是源碼層面的規(guī)范。兩者沒有直接聯(lián)系。
遵循相同ABI的系統(tǒng),所提供的API可能不同:
相同的不同的系統(tǒng)如Windows和Linux都可以在電腦上安裝,原因是遵循了相同的ABI規(guī)范,但是源代碼是不同的,原因API不同。
遵循相同API的系統(tǒng),所提供的ABI可能不同:
QT應(yīng)用程序開發(fā)后(API相同,源代碼),可以在Windows和Linux上運行,單經(jīng)過編譯后的可執(zhí)行文件不同(編譯時遵循的ABI不同)
Java跨平臺原理:
編譯之后的二進制文件相同,通過運行在不同平臺上java虛擬機將其翻譯成對應(yīng)平臺的可執(zhí)行程序(翻譯的規(guī)則是平臺的ABI規(guī)范)。
QT跨平臺的原理:
相同的源代碼(api),,通過在不同品臺編譯后成為各個品臺的可執(zhí)行程序(編譯規(guī)范遵守了平臺的ABI規(guī)范)。
從這個角度考慮程序的可移植性,只需要將類型適配層做相應(yīng)修改,使得數(shù)據(jù)類型滿足平臺規(guī)范即可。
如下面的程序,有兩種對其方式,在Linux中使用的是壓縮存儲。
struct {
short s : 9;
int j : 9;
char c;
short t : 9;
short u : 9;
char d;
} s;
Linux下輸出結(jié)果:
寄存器時處理器用來處理數(shù)據(jù)的載體,一些寄存器在處理器設(shè)計時就規(guī)定好了功能。
X86寄存器的ABI規(guī)范:
Power PC寄存器的ABI規(guī)范
當函數(shù)調(diào)用時,參數(shù)會被傳遞給被調(diào)用的函數(shù),而返回值會被返回給函數(shù)調(diào)用者。
調(diào)用約定描述參數(shù)如何傳遞到棧中以及棧的維護方式:參數(shù)的傳遞順序(如從左向右入棧)、調(diào)用棧的清理(如被調(diào)函數(shù)負責清理棧)。
調(diào)用約定通常用于調(diào)用和庫開發(fā):
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。