Re: How to free memory ater use of "new" to allocate it.

2023-07-16 Thread Richard (Rikki) Andrew Cattermole via Digitalmars-d-learn
Steven is right, was quite late when I said that so it'll work but not for the reasons I thought it would.

Re: Print debug data

2023-07-16 Thread Chris Katko via Digitalmars-d-learn
On Monday, 17 July 2023 at 03:43:04 UTC, Alain De Vos wrote: Is it possible to print runtime memory usage of: -The stack -The heap -The garbage collector ? there's gc.stats for part of it: https://dlang.org/library/core/memory/gc.stats.html

Re: How to free memory ater use of "new" to allocate it.

2023-07-16 Thread Alain De Vos via Digitalmars-d-learn
Maybe code above works when you enforce an Garbage-collection-run ? Code below works fine. So you cannot use "new" but must use malloc? ``` import std.stdio:writefln; import object: destroy; import core.memory: GC; import core.stdc.stdlib: malloc,free; void dofun(){ auto pa=cast(int *)m

Print debug data

2023-07-16 Thread Alain De Vos via Digitalmars-d-learn
Is it possible to print runtime memory usage of: -The stack -The heap -The garbage collector ?

Re: How to free memory ater use of "new" to allocate it.

2023-07-16 Thread Alain De Vos via Digitalmars-d-learn
The following program prints two different addresses. Meaning the new allocates memory until the program dies. So the means memory leak by default ? ``` import std.stdio:writefln; import object: destroy; import core.memory: GC; void dofun(){ auto a=new int[1000]; writefln("%12x",&a);

Re: How to free memory ater use of "new" to allocate it.

2023-07-16 Thread Steven Schveighoffer via Digitalmars-d-learn
On 7/16/23 2:41 PM, Alain De Vos wrote: Is this ok ? ``` void main(){ int[] i=new int[1];     import object: destroy; destroy(i);     import core.memory: GC; GC.free(GC.addrOf(cast(void *)(i.ptr))); } ``` No, that won't work. Check out `i` value after you call `destroy` on

Re: How to free memory ater use of "new" to allocate it.

2023-07-16 Thread Richard (Rikki) Andrew Cattermole via Digitalmars-d-learn
Yes. For basic types like int's, you don't need to destroy the array. As long as you don't slice the array and store that in i, you don't need to call addrOf too.

Re: How to free memory ater use of "new" to allocate it.

2023-07-16 Thread Alain De Vos via Digitalmars-d-learn
Is this ok ? ``` void main(){ int[] i=new int[1]; import object: destroy; destroy(i); import core.memory: GC; GC.free(GC.addrOf(cast(void *)(i.ptr))); } ```

Re: How to free memory ater use of "new" to allocate it.

2023-07-16 Thread Richard (Rikki) Andrew Cattermole via Digitalmars-d-learn
You can do it with ``GC.free``. But you really shouldn't need to (it won't automatically release it back to OS). https://dlang.org/phobos/core_memory.html#.GC.free

Re: Initializing an associative array into a variable when it is created

2023-07-16 Thread Alexander Zhirov via Digitalmars-d-learn
On Sunday, 16 July 2023 at 11:16:55 UTC, Danilo wrote: Would a static constructor be okay? This way the static data is not initialized at every `new` and object creation is faster. Alternatively, i can think about your proposal. At the moment, I have solved my problem using the following metho

Re: Initializing an associative array into a variable when it is created

2023-07-16 Thread Danilo via Digitalmars-d-learn
But is there really no other way to immediately point a static array to a variable? Looks like this is not implemented yet: - https://dlang.org/spec/hash-map.html#static_initialization Would a static constructor be okay? This way the static data is not initialized at every `new` and object cre

Re: Initializing an associative array into a variable when it is created

2023-07-16 Thread Alexander Zhirov via Digitalmars-d-learn
On Saturday, 15 July 2023 at 23:34:22 UTC, Danilo wrote: Works fine, if you add a semicolon at the end. I'm sorry. I didn't put the question quite correctly. Yes, this is how the array is initialized. I'm trying to describe it all in a class. I.e. I need to create a variable in the class that