我试图理解RustClone和CopyRust 之间的区别。谷歌搜索我看到的答案似乎可以归结为:Clone专为任意重复而设计,而Copy代表可以通过memcpy.
所有这些答案的问题在于所有参考都memcpy假设读者知道什么memcpy
但对于像我这样不确定的人来说,memcpy因为我没有 C/C++ 经验,所以不确定这如何帮助解释复制和克隆之间的区别。
有人可以帮助解释复制memcpy和克隆之间的区别吗?特别是如何提及它?
memcpy是复制字节缓冲区的低级系统函数。在伪代码中,memcpy执行以下操作:
memcpy(to, from, size):\n for i from 0 to size:\n to[i] = from[i]\nRun Code Online (Sandbox Code Playgroud)\n也就是说,它实际上是从一个内存位置到另一个固定长度的简单、逐元素的字节副本。但它\xe2\x80\x99s 的实现非常高效。如果一个类型是memcpy-able 的,则意味着它的内存表示不包含依赖于其内存位置的逻辑。也就是说,一旦对象被复制或移动到不同的内存地址,它仍然有效。
i32对于或 等类型来说也是如此f64。但对于向量来说,情况并非如此,因为向量通常被实现为大小、容量和指向另一个缓冲区的指针。如果我们通过 复制向量memcpy,新对象中的该指针现在仍然指向旧对象\xe2\x80\x99s 缓冲区。这\xe2\x80\x99s为什么i32等实现了Copy,但std::vec::Vec没有。
| 归档时间: |
|
| 查看次数: |
538 次 |
| 最近记录: |