在 Rust 编译器内部,所有目标都有一个data_layout. 这根绳子看起来真的很可怕,让我做噩梦。它的例子是
e-m:x-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:32-n8:16:32-a:0:32-S32
Run Code Online (Sandbox Code Playgroud)
和
e-m:e-i64:64-f80:128-n8:16:32:64-S128
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
这些数据布局字符串由LLVM定义,并在文档中进行了解释。您还可以尝试学习解析这些字符串的 Rust 编译器代码。
让我们看这个例子:
e-m:e-i64:64-f80:128-n8:16:32:64-S128
e: 小端m:e: ELF 损坏i64:64:对小端 64 位整数的本机支持f80:128:将80位浮点数存储在128位中n8:16:32:64:处理器具有 8、16、32 和 64 位的本机寄存器S128:堆栈的自然对齐(以位为单位)p270:32:32-p271:32:32-p272:64:64这里解释了指的是什么:许多 Rust 编译器目标定义在数据布局中使用“p270:32:32-p271:32:32-p272:64:64” - 这是什么意思?