我试图弄清楚X1 M0 N1 X和Rust中的X1 M1 N1 X之间的区别。在谷歌上搜索我看到的答案似乎可以归结为:Clone
是为任意复制而设计的,而Copy
表示可以通过memcpy
安全复制的值。
所有这些答案的问题是所有对memcpy
的引用都假设读者知道memcpy
是什么
但是对于像我这样不确定memcpy
的人来说,因为我没有C/C++的经验,不知道这如何帮助解释复制和克隆之间的区别。
有人能帮助解释一下什么是memcpy
,以及具体地说,提到它是如何区分拷贝和克隆的吗?
1条答案
按热度按时间guicsvcw1#
memcpy
是复制字节缓冲区的低级系统函数。在伪代码中,memcpy
执行以下操作:也就是说,它实际上是一个简单的,按元素的方式将字节从一个内存位置复制到另一个固定长度的内存位置。但它的实现非常高效。如果一个类型是
memcpy
-able,这意味着它的内存表示不包含依赖于它的内存位置的逻辑。也就是说,一个对象一旦被复制或移动到不同的内存地址,它仍然有效。这对于
i32
或f64
等类型是正确的。但对于向量就不正确了,因为向量通常是以大小、容量和指向另一个缓冲区的指针的形式实现的。如果我们通过memcpy
复制一个向量,那么新对象中的这个指针现在仍然指向旧对象的缓冲区。这就是i32
等实现Copy
的原因。但是std::vec::Vec
不具有。