为什么大多数ffi函数使用原始指针而不是引用



无论是在ffi教程中还是在自动生成的接口中,大多数时候都会使用*const T指针。据我所知,&T*const T之间的区别只是*const T不必满足某些条件,比如不为空,并且不安全。

fn main() {
unsafe {
do_something(&TestStruct {data: 3})
}
}
#[repr(C)]
pub struct TestStruct {
data: u32
}
extern "C" {
fn do_something(arg: &TestStruct);
}

此代码可以编译并运行。因为外部函数的用法与内部函数相似,所以我不明白为什么在那里使用原始指针作为默认值。

答案的元素可能存在于引用必须对齐的事实中。由于使用未对齐的引用是未定义的行为,并且在外国金融机构中无法保证指针的对齐,因此默认使用指针似乎是一个明智的选择

最新更新