On 12/10/12 3:49 PM, [email protected] wrote:
Aren't both ~vector and @vector dynamic memory? why can we append to a
~vector but not to a @vector?
Because the pointer points to an object that looks like this:
---> [ length ] [ element 1 ] [ element 2 ] [ element 3 ]
Now suppose that the allocator didn't leave any room for more elements
after it. In general we have to assume this, because we can't leave an
infinite amount of space after our arrays. Thus in general appending to
a vector requires reallocating the entire vector and move it to some new
location in memory. The problem is that, after we do that, we have to
update all the pointers to point to the new location.
In the case of ~[T] this is easy. There is only one pointer, and it was
passed into push(), so we can just update it. With @[T] it's not so easy
though. We have no idea at compile time how many pointers there are to
the vector, and even at runtime finding all the pointers and updating
them would be a quite complex and expensive operation. So we have to
copy the array.
Patrick
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev