Bytes是连续内存区域,vec并不是呀。
vec<T>,vec首先会有一块连续内存区域保存T数据的“指针”,T可能还有成员变量是在其它地方。
比如 let v: vec<String> = vec!["123", "asbda"]; 那么v会申请一片连续区域,能保存下2个String的“指针”,这2个String指针会分别指向字符串的真实地址(以及内存大小)。而字符串"123"和"asbda"则不一定在一片连续内存区域里。
v1.extend(v2)只需要把v2里的数据指针复制过去就行了,用rust语言就是把v2的所有权转移到v1,之后v2就不能用了。
合并用extend应该是最高效的了,还有append之类的方法都差不离。但它们都不是你之前说
的“零拷贝”,因为还是要复制“指针”的。
【 在 AlphaO 的大作中提到: 】
: 还是有点困惑
: vec<t>,当t不可copy及clone时,也可以用extend扩展,这里面实现过程,会重新allocation吗?
: 或者再提炼一下问题,如何将两个vec<t>用最高效率合并为一个vec
: ...................
--
FROM 114.92.200.*