Memory allocation failed. Why?

thedeemon via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Nov 21 23:07:52 PST 2016


On Sunday, 20 November 2016 at 17:47:50 UTC, MGW wrote:

> ----------------
> core.exception.OutOfMemoryError at src\core\exception.d(693): 
> Memory allocation failed
> ----------------
>
> Simple program and error. Why?  Windows 7 (32) dmd 2.072.0

Making a 100 million bytes array by appending one byte at a time 
creates a lot of intermediate-size arrays. Ideally these should 
be garbage collected away but GC in D is not only slow but also 
leaky. In 32 bits if you have 1000 random int values on the stack 
or data segment, with uniform distribution, this is 1000 random 
locations in memory pinned and seen by GC as live, i.e. one per 4 
MB of address space. Which means if your array is 4 MB or larger 
it's almost doomed to be never collected by GC in this scenario. 
Your program creates a lot of large arrays and they don't get 
collected because of false pointers and not precise enough GC. 
Moral of the story: in 32 bits don't allocate anything big (1 MB 
or more) in GC heap, otherwise there are good chances it will 
create a memory leak. Use std.container.array  or something 
similar.


More information about the Digitalmars-d-learn mailing list