1.1 ABI
ABI(应用程序二进制接口)是一种标准,涉及:
- 类型在内存中的布局(即类型的尺寸、对齐、偏移量及其字段的布局)
- 符号在链接器中的命名(例如名称修饰)
- 函数的调用约定(即函数调用在二进制级别上如何工作)
通过定义这些规则并且不违反它们,ABI被认为是稳定的,这可以用来,例如,可靠地链接多个库、可执行文件或对象,这些都是在单独编译的(可能是在不同的机器上或使用不同的编译器)。这允许进行FFI(外部函数接口),我们可以在不同的编程语言之间共享代码。
Zig原生支持外部事物的C ABI;使用的C ABI取决于你正在编译的目标(例如CPU架构、操作系统)。这允许与非Zig编写的代码几乎无缝地进行互操作;C ABI的使用在编程语言中是标准的。
Zig内部不使用ABI,这意味着代码应该明确符合C ABI,以便在需要可重现和定义的二进制级别行为的地方。
1.2 C 原生类型
Zig提供了特殊的以c_为前缀的类型,以便符合C ABI。这些类型没有固定的尺寸,而是根据所使用的ABI改变尺寸。
Type | C Equivalent | Minimum Size (bits) |
---|---|---|
c_short | short | 16 |
c_ushort | unsigned short | 16 |