为什么go的编译器“gc”使用与C不同的调用约定?

时间:2013-03-31 22:44:09

标签: go cdecl

C使用cdecl,我已经查看并使用程序集调用它。感觉还不错,为什么打破兼容性呢?为什么需要另一个公约?

1 个答案:

答案 0 :(得分:5)

因为拥有相同的调用约定没有优势。 Go代码和C代码不能直接相互调用,即使调用约定是相同的,因为Go使用拆分堆栈。

OTOH,它在gccgo中是有意义的,因为gcc支持某些架构的C分割堆栈。而且,IIRC,调用约定是因为兼容性。 (更多details here。)

免责声明:我从未真正使用过gccgo。