Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 23 Aug 2013 10:10:42 -0700
From:      Steve Kargl <sgk@troutmask.apl.washington.edu>
To:        Anton Shterenlikht <mexas@bris.ac.uk>
Cc:        fortran@freebsd.org
Subject:   Re: lazy memory allocation
Message-ID:  <20130823171042.GA47588@troutmask.apl.washington.edu>
In-Reply-To: <201308231025.r7NAPwNH043266@mech-cluster241.men.bris.ac.uk>
References:  <201308231025.r7NAPwNH043266@mech-cluster241.men.bris.ac.uk>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, Aug 23, 2013 at 11:25:58AM +0100, Anton Shterenlikht wrote:
> I've been burned by what's apparently called
> "lazy memory allocation" on linux.
> 
> My code calls a subroutine that allocates
> a coarray. This routine exits fine, with
> no error. However, when I tried to initialise
> the coarray, I got segfault. On investigation
> I discovered that the coarray was not in fact
> allocated. In my particular case this was
> because there was not enough memory.
> 
> Anyway, I was later told that this is an
> expected behaviour on linux, with its
> "lazy memory allocation".
> 
> I'm wondering if FreeBSD also uses
> a lazy memory allocation, or we do it differently?

man malloc.

FreeBSD uses jemalloc, which allows one to tune the 
allocators behavior.  I suspect, but have not tried
to verify, that by default it uses lazy memory 
allocation.

To avoid possible issues with lazy memory allocation,
initialize the memory.

real, allocatable :: a(:)
allocate(a(10) :: source=0.)

You can also add in STAT and ERRMSG after SOURCE to 
inspect whether allocation was successful.

-- 
Steve



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20130823171042.GA47588>