最近在看Option的源码,一直往里看,发现了这么一个代码段
extern "rust-intrinsic" {
fn copy_nonoverlapping<T>(src: *const T, dst: *mut T, count: usize);
}
查了一下rust-intrinsic这个是ABI相关的东西,但是我有一个疑问,如果我还想看它这个copy_nonoverlapping的源代码,我应该如何下手?求教各位大神
1
共 3 条评论, 1 页
评论区
写评论我的一个疑问是:比如内存copy这种东西,在cpp里面直接用指针写一下就可以了,但在rust里的copy使用的是llvm内置的函数。那么为什么rust不能直接用指针操作一下呢?(std库函数中)或者说,使用内置函数有什么好处呢?
--
👇
laizy: 编译器内置的函数,就像i32是内置的类型一样。这样可以提供很多有用的元信息便于编译器做优化,目前大部分rustc的内置函数调用的是llvm的编译内置函数。比如这个就是调用的
llvm.memcpy
. 详细可以看:https://www.llvm.org/docs/LangRef.html#standard-c-library-intrinsics编译器内置的函数,就像i32是内置的类型一样。这样可以提供很多有用的元信息便于编译器做优化,目前大部分rustc的内置函数调用的是llvm的编译内置函数。比如这个就是调用的
llvm.memcpy
. 详细可以看:https://www.llvm.org/docs/LangRef.html#standard-c-library-intrinsics我完全不懂这个,不过
copy_nonoverlapping
的源代码应该是在这里:https://github.com/rust-lang/rust/blob/8a87b945b27b5670ac5ed665bbb0fccc1b88a0a0/src/librustc_codegen_llvm/intrinsic.rs#L231