Hello. I want to try use D without GC and I'm not sure what I do
all right.
import core.memory;
version( gcdis ) enum gc_disable = true;
else enum gc_disable = false;
class Foo
{
byte[][] buf;
this()
{
foreach( i; 0 .. 32 )
buf ~= new byte[]( 65536 * 16 );
}
~this()
{
static if( gc_disable )
{
// no warning about deprecated 'delete'
foreach( i; 0 .. 32 )
delete buf[i];
delete buf;
}
}
}
void main()
{
static if( gc_disable ) GC.disable();
foreach( i; 0 .. 200 )
scope foo = new Foo;
static if( gc_disable )
{
GC.enable();
GC.collect();
}
}
dmd -version=gcdis test.d && ./test "--DRT-gcopt=profile:1"
Number of collections: 2
Total GC prep time: 0 milliseconds
Total mark time: 0 milliseconds
Total sweep time: 0 milliseconds
Total page recovery time: 0 milliseconds
Max Pause Time: 0 milliseconds
Grand total GC time: 0 milliseconds
GC summary: 51 MB, 2 GC 0 ms, Pauses 0 ms < 0 ms
dmd test.d && ./test "--DRT-gcopt=profile:1"
Number of collections: 205
Total GC prep time: 1 milliseconds
Total mark time: 1 milliseconds
Total sweep time: 5 milliseconds
Total page recovery time: 0 milliseconds
Max Pause Time: 0 milliseconds
Grand total GC time: 8 milliseconds
GC summary: 69 MB, 205 GC 8 ms, Pauses 3 ms < 0 ms
I use this feature correctly?