comp.lang.ada
 help / color / mirror / Atom feed
From: Brian Drummond <brian_drummond@btconnect.com>
Subject: Using local storage pools...
Date: Wed, 23 Feb 2011 19:01:22 +0000
Date: 2011-02-23T19:01:22+00:00	[thread overview]
Message-ID: <7elam6trrv39c3p9iop4fiduqa1jrat4r4@4ax.com> (raw)

I am trying to learn a little about storage pools, with a view to (hopefully)
using local pools to improve the Binary_Trees benchmark in the same way as some
of the faster C benchmarks.

Arguably they cheat : they do not explicitly free each tree node (the "free"
call has been deleted!) but free the entire pool at the end of the loop.
But if that's valid, Ada should be able to do the same.

http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gnat_ugn_unw/Some-Useful-Memory-Pools.html
suggests System.Pool_Local offers a way to do likewise - a pool that is
automatically reclaimed when it goes out of scope.

This turns out to have its own performance problem, but that is another story...

The question(or four)  for now is ... should the following really raise
Storage_Error, i.e. am I doing something silly, and if so, what? 
Or is this a bug in Gnat?

NOTE - using System.Pool_Global.Unbounded_No_Reclaim_Pool 
(commented out) instead of the pool shown, works as expected.

(Tested on GCC4.5.0 and Libre 2010)

- Brian

------------------------------------------------------------------------------------
with System.Pool_Local;
with System.Pool_Global;
with Ada.Unchecked_Deallocation;

procedure pooltest is

   type Node;
   type Treenode is access Node;
   type Node is record
      Left  : Treenode := null;
      Right : Treenode := null;
      Item  : Integer  := 0; 
   end record;

   P : System.Pool_Local.Unbounded_Reclaim_Pool;    
   --P : System.Pool_Global.Unbounded_No_Reclaim_Pool;
   for Treenode'Storage_Pool use P;

   procedure free is new Ada.Unchecked_Deallocation(Node, Treenode);

   TestNode : Treenode;

begin
   Testnode := new Node'(null, null, 1);
   free(Testnode);   
end pooltest;
------------------------------------------------------------------------------------



             reply	other threads:[~2011-02-23 19:01 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-02-23 19:01 Brian Drummond [this message]
2011-02-23 20:42 ` Using local storage pools Dmitry A. Kazakov
2011-02-23 23:55   ` Brian Drummond
2011-02-24  9:26     ` Dmitry A. Kazakov
2011-02-24  9:51       ` Georg Bauhaus
2011-02-24 10:09         ` Dmitry A. Kazakov
2011-02-24 10:39         ` Brian Drummond
2011-02-23 20:51 ` Ludovic Brenta
2011-02-24  0:27   ` Brian Drummond
2011-02-24  8:03     ` Ludovic Brenta
2011-02-24 17:04       ` Brian Drummond
2011-02-24 12:34     ` Robert A Duff
2011-02-23 21:01 ` Simon Wright
2011-02-24  0:00   ` Brian Drummond
2011-02-26  3:02 ` Randy Brukardt
2011-02-26 18:41   ` Pascal Obry
2011-02-26 18:59     ` Pascal Obry
2011-02-26  3:07 ` Randy Brukardt
2011-02-26  8:41 ` anon
2011-02-26 10:42   ` Pascal Obry
2011-02-26 11:41   ` Ludovic Brenta
2011-02-27  4:16     ` anon
2011-02-27  8:18       ` Pascal Obry
2011-02-27 23:46         ` Georg Bauhaus
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox