Can't understand if deallocation happens?
Suliman via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sun Jan 22 04:49:11 PST 2017
import std.stdio;
import std.string;
import core.memory;
void main()
{
char [] str = "aaa".dup;
char [] *str_ptr = &str;
writeln("before: ", str_ptr.ptr);// address of structure
writeln(*str_ptr.ptr); // address of data
str[] = "bbb"[]; // now writing to structure new data, so ptr
would be point to them
writeln("after: ", str_ptr.ptr);
writeln("length: ", str_ptr.length);
writeln("str_ptr point to: ", *str_ptr.ptr);
writeln(str_ptr);
writeln("before dealloc: ", str_ptr.length);
GC.free(str_ptr.ptr);
writeln(str_ptr);
writeln("after dealloc: ", str_ptr.length);
}
As I understand str structure would have 2 data peace after
writing "bbb" to it. But ptr will point to last one (to "bbb").
[aaa] [bbb]
--------+
So after appending "bbb" I should see that the size is 3, after
appending 6. After GC again 3. But I see only 3 before and after
GC:
> app.exe
before: 2641010
a
after: 2641010
length: 3
str_ptr point to: b
19FE0C
before dealloc: 3
19FE0C
after dealloc: 3
And am I right understand that here memory should be GC-ed?
Another question:
writeln("before: ", str_ptr.ptr);// address of structure
Is it's address from 0 of current App memory?
More information about the Digitalmars-d-learn
mailing list