From: gpriv@axonx.com
Subject: Re: Allocators and memory reclamation
Date: Mon, 28 Jan 2008 06:52:30 -0800 (PST)
Date: 2008-01-28T06:52:30-08:00 [thread overview]
Message-ID: <e6e52245-4082-41fe-a0eb-31909c774c7f@v4g2000hsf.googlegroups.com> (raw)
In-Reply-To: 4a2fe64e-ae34-4093-88ec-1dc612a9adbd@v29g2000hsf.googlegroups.com
On Jan 28, 8:49 am, Maciej Sobczak <see.my.homep...@gmail.com> wrote:
> Hi,
>
> Consider the following:
>
> procedure Foo is
> type Int_Ptr is access Integer;
> P : Int_Ptr;
> begin
> P := new Integer;
> P := new Integer;
> P := new Integer;
> end Foo;
>
> procedure Main is
> begin
> loop
> Foo;
> end loop;
> end Main;
>
> In Foo above, three objects of type Integer are allocated and the
> storage is taken from the storage pool associated with the Int_Ptr
> access type.
> What I understood before is that this storage pool is torn down when
> the access type itself goes out of scope and it is also when the
> memory is reclaimed. As a result no memory is leaked in the above code
> - I can call Foo as many times as I want without any risk of running
> out of memory. This is at least what I can observe with controlled
> types.
Your understanding is incorrect. By default Ada provides deterministic
deallocation only similar to C++, and your program eventually will
crash running out of memory. You may define your own behavior by
deriving from Root_Storage_Pool and assign your own pool
implementation for particular objects.
>
> The problem is that my understanding conflicts with what I've just
> found in AARM (13.11):
> "By default, the implementation might choose to have a single global
> storage pool, which is used (by default) by all access types, which
> might mean that storage is reclaimed automatically only upon partition
> completion."
>
> This means that the implementation might turn the above well-behaving
> procedure into a memory leak. Is this correct?
I would say it is a stretch to say that program above is well-
behaving. What would be bad-behaving then?
> Can I influence this behaviour to portably ensure that memory is
> reclaimed when the access type goes out of scope?
>
> Another question relates to the order of finalizing objects. If the
> storage pool is torn down when the access type goes out of scope, is
> the order of finalizing objects guaranteed?
that will be irrelevant since default deallocation is deterministic.
You may implement any behavior if use your own pool.
>
> --
> Maciej Sobczak *www.msobczak.com*www.inspirel.com
next prev parent reply other threads:[~2008-01-28 14:52 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-01-28 13:49 Allocators and memory reclamation Maciej Sobczak
2008-01-28 14:52 ` gpriv [this message]
2008-01-28 14:53 ` Lucretia
2008-01-28 16:00 ` gpriv
2008-01-28 22:46 ` Alex R. Mosteo
2008-01-28 15:15 ` Dmitry A. Kazakov
2008-01-28 22:27 ` Maciej Sobczak
2008-01-28 23:54 ` Adam Beneschan
2008-01-29 9:38 ` Dmitry A. Kazakov
2008-01-28 23:07 ` Randy Brukardt
2008-01-28 22:00 ` Aurele
2008-01-29 0:41 ` Robert A Duff
2008-01-29 11:12 ` Maciej Sobczak
-- strict thread matches above, loose matches on Subject: below --
2008-01-29 11:06 Grein, Christoph (Fa. ESG)
2008-01-29 12:50 ` Dmitry A. Kazakov
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox