Robert Fraser wrote:
Simpler version, sans printf:
module leak;
import tango.core.Memory;
struct Data
{
Data* prev;
char[4092] something;
}
public void main()
{
Data* data;
Data* newData;
int i;
while(true)
{
for(i = 0; i < 10_000; i++)
{
newData = new Data;
newData.prev = data;
data = newData;
}
data = null;
newData = null;
At this point it's quite possible that you still have a reference to
newData in a register. If you want to be sure the collect call below
works as intended for this test, try adding:
newData = new Data;
here.
i = 0;
GC.collect();
}
}
Beyond that, you'll just potentially end up with a bunch of false
positives, since you have a big static array in the same block as a
pointer. But since you aren't actually setting the array contents in
this test, that clearly isn't a problem here.