2013-08-08 19 views
5

Ho visto in diversi punti che le convenzioni di chiamata Microsoft per le piattaforme x64 sono state ridotte a una sola: Caller cleans stack (cdecl) ei parametri sono passati in una combinazione di stack e registri (non sto entrando in i dettagli esatti qui). Suppongo che, se questa è la convenzione di chiamata del sistema operativo, probabilmente seguiranno anche tutti gli altri compilatori che utilizzano Windows (ad esempio mingw-w64).Chiamata convenzione su x64

Questa convenzione di chiamata è valida anche su altre piattaforme principali (x64 Linux, ecc.)? O Linux usa ancora più convenzioni di chiamata, o anche solo una, ma una diversa? Do GCC o Clang consentire più convenzioni di chiamata su x64 Linux?

+6

Quei giorni felici stanno per finire. Microsoft sta aggiungendo la convenzione di chiamata __vectorcall. Fino a sei valori di '__m128' sono passati attraverso i registri SSE2. –

risposta

8

Ho appena trovato la risposta here e here. Fondamentalmente, Windows lo fa in un modo, tutti gli altri lo fanno in un altro modo, ma ogni piattaforma lo fa solo in un modo (al contrario di più modi per piattaforma con x86)

+1

Non puntare il dito su entrambi i lati, ma si potrebbe pensare che dopo tutte le convenzioni di chiamata del dolore x86 abbiano causato, concordare uno standard sarebbe stato una priorità con x64 – Basic