據我所知,呼叫約定取決于平臺是 Windows 還是 Linux。
我想知道,
- 編譯器使呼叫約定不同。
- 平臺使呼叫約定不同。
哪一個是真的?如果只有 2 為真,呼叫約定是否由平臺定義,編譯器是否只遵循定義的約定?
uj5u.com熱心網友回復:
平臺通常定義一個或多個“標準”呼叫約定。如果編譯器希望使用這些約定與平臺上的其他工具或組件進行互操作,編譯器需要遵循這些約定,但可以在內部使用自己不同的呼叫約定。
唯一真正的要求是任何呼叫者和被呼叫者都需要就它們之間的呼叫約定達成一致。
uj5u.com熱心網友回復:
相關:為什么 Windows64 使用與 x86-64 上的所有其他作業系統不同的呼叫約定?談論誰定義了呼叫約定。
在這種情況下,GCC 開發人員有效地代表整個平臺為 x86-64 System V ABI 做出了決定。
顯然,編譯器開發人員是最有可能設計出好的編譯器的人,但是一旦設定好,其他制作新編譯器的人如果想要兼容就必須遵循它。
所有非 Windows 作業系統都選擇遵循相同的 x86-64 System V 呼叫約定,因為它設計得非常好,因此它涵蓋的平臺集增長到包括所有非 Windows 作業系統。部分原因是它們都使用 GCC 和 GCC 兼容的編譯器。這不像不同編譯器的開發人員聚在一起就他們都遵循的那個平臺的呼叫約定達成一致,當時只有一個主要的免費非 Windows C 編譯器(2000 年代初期)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/437330.html
