< 返回版块

yooocen 发表于 2020-01-26 18:28

最近在看Option的源码,一直往里看,发现了这么一个代码段

extern "rust-intrinsic" {
        fn copy_nonoverlapping<T>(src: *const T, dst: *mut T, count: usize);
    }

查了一下rust-intrinsic这个是ABI相关的东西,但是我有一个疑问,如果我还想看它这个copy_nonoverlapping的源代码,我应该如何下手?求教各位大神

评论区

写评论
MrZLeo 2022-07-15 18:59

我的一个疑问是:比如内存copy这种东西,在cpp里面直接用指针写一下就可以了,但在rust里的copy使用的是llvm内置的函数。那么为什么rust不能直接用指针操作一下呢?(std库函数中)或者说,使用内置函数有什么好处呢?

--
👇
laizy: 编译器内置的函数,就像i32是内置的类型一样。这样可以提供很多有用的元信息便于编译器做优化,目前大部分rustc的内置函数调用的是llvm的编译内置函数。比如这个就是调用的llvm.memcpy. 详细可以看:https://www.llvm.org/docs/LangRef.html#standard-c-library-intrinsics

laizy 2020-01-27 20:07

编译器内置的函数,就像i32是内置的类型一样。这样可以提供很多有用的元信息便于编译器做优化,目前大部分rustc的内置函数调用的是llvm的编译内置函数。比如这个就是调用的llvm.memcpy. 详细可以看:https://www.llvm.org/docs/LangRef.html#standard-c-library-intrinsics

AlephAlpha 2020-01-27 10:06

我完全不懂这个,不过 copy_nonoverlapping 的源代码应该是在这里:https://github.com/rust-lang/rust/blob/8a87b945b27b5670ac5ed665bbb0fccc1b88a0a0/src/librustc_codegen_llvm/intrinsic.rs#L231

1 共 3 条评论, 1 页