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?

Reply via email to