digitalmars.D.learn - Freeing memory after string concatenation
- Alex (24/24) Dec 23 2008 Hey,
- bearophile (17/17) Dec 23 2008 I am using D1, while you probably use D2. I have compiled the following ...
- Sean Kelly (8/35) Dec 23 2008 Here, a single allocation will take place for con.
Hey, I got a problem after concatenating two strings: void main() { while(true) // For faking high program activity... { string t="Do"; string t2="That" foo(t,t2); delete t; delete t2; } } void foo(string s1, string s2) { string con=s1~s2; writeln(con); delete con; } until now, there seems everything to be ok but now I want to make my program run most efficiently... I looked at the memory usage with the TaskManager I found that 'con' did not get removed! (the memory usage grew up very fast after several repeations) Why?
Dec 23 2008
I am using D1, while you probably use D2. I have compiled the following code with -O -release -inline, with the last DMD 1.x: import std.stdio: writefln; void foo(string s1, string s2) { string con = s1 ~ s2; writefln(con); } void main() { while(true) { string t1 = "Do"; string t2 = "That"; foo(t1, t2); } } After more than two minutes of running I don't see any increase of memory used. Don't use delete in your code, generally it's not needed. Bye, bearophile
Dec 23 2008
Alex wrote:Hey, I got a problem after concatenating two strings: void main() { while(true) // For faking high program activity... { string t="Do"; string t2="That" foo(t,t2); delete t; delete t2;Not necessary in this case, since t and t2 will reference static memory.} } void foo(string s1, string s2) { string con=s1~s2; writeln(con); delete con;Here, a single allocation will take place for con.} until now, there seems everything to be ok but now I want to make my program run most efficiently... I looked at the memory usage with the TaskManager I found that 'con' did not get removed! (the memory usage grew up very fast after several repeations)You can't watch TaskManager to get an accurate measure of in-program memory use. The GC allocates and potentially frees memory from the OS in blocks, and it does not do so very often. Better to use the GC statistics feature if you want a detailed idea of what's going on. Sean
Dec 23 2008