How or When to Release "abc" on Heap:
fn test() {
let mut s1 = String::from("abc");
println!("{}", s1);
let s2 = String::from("123");
s1 = s2;
println!("{}", s1);
// ...
}
How or When to Release "abc" on Heap:
fn test() {
let mut s1 = String::from("abc");
println!("{}", s1);
let s2 = String::from("123");
s1 = s2;
println!("{}", s1);
// ...
}
Rust compiler decides when to free your heap memory on compile time. There is no memory leak on your code. Read this fore more information:
https://doc.rust-lang.org/book/ch04-00-understanding-ownership.html
Whether “abc” is released when s1 exits the scope, which can be a long time.
The s1 = s2
line destroys the previous value in s1
, deallocating abc.
I did not fully understand you, however, if you need to free any heap memory that you own the ownership early, you can use the drop function.:
https://stackoverflow.com/questions/42910662/is-it-possible-in-rust-to-delete-an-object-before-the-end-of-scope
Sorry for my poor English.
I mean, in java , when line s1=s2; the "abc" has no References and GC comes free "abc".
it seems that s1 can have ownership of both "abc" and "123" at same time?
No. When s1 is set to the new value, the old value is dropped, since it doesn't have any other owner (unless you use something like mem::swap
, of course).
If it is a sequence like Vec
, it can. But this is not the case here.
In Rust, abc is freed immediately when s1 = s2
runs, whereas in Java it is freed "soon" whenever the GC gets around to it.
This topic was automatically closed 90 days after the last reply. We invite you to open a new topic if you have further questions or comments.