P.EMB.02 no-std 下要确保程序中的类型有正确的内存布局
【描述】
链接器决定 no-std 程序的最终内存布局,但我们可以使用链接器脚本对其进行一些控制。链接器脚本给我们的布局控制粒度是在 段( Section) 级别。段是在连续内存中布置的 符号 集合。反过来,符号可以是数据(静态变量)或指令(Rust 函数)。
这些编译器生成的符号和段名称不能保证在 Rust 编译器的不同版本中保持不变。但是,Rust 允许我们通过以下属性控制符号名称和部分位置:
#[export_name = "foo"]
将符号名称设置为foo
.#[no_mangle]
意思是:使用函数或变量名(不是它的完整路径)作为它的符号名。#[no_mangle] fn bar()
将产生一个名为bar
的符号。#[link_section = ".bar"]
将符号放置在名为.bar
的部分中。
通过这些属性,我们可以公开程序的稳定 ABI 并在链接描述文件中使用它。