Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 24 Aug 2013 21:35:53 +0100 (BST)
From:      Anton Shterenlikht <mexas@bris.ac.uk>
To:        mexas@bris.ac.uk, sgk@troutmask.apl.washington.edu
Cc:        fortran@freebsd.org
Subject:   Re: lazy memory allocation
Message-ID:  <201308242035.r7OKZrbU059461@mech-cluster241.men.bris.ac.uk>
In-Reply-To: <20130823171042.GA47588@troutmask.apl.washington.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
>From sgk@troutmask.apl.washington.edu Fri Aug 23 19:28:09 2013
>
>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.)

ok, thanks for this hint

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

That's the thing. I had it, like in

integer :: errstat=0
allocate(a(10),stat=errstat)
if (errstat .ne. 0) stop "some msg"

And didn't get stopped, i.e. errstat was zero
on exit from ALLOCATE. The segfault happened on

a = some_value

Anton



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