comp.lang.ada
 help / color / mirror / Atom feed
From: Niklas Holsti <niklas.holsti@nospam.please>
Subject: Re: Memory Useage
Date: Sat, 09 Jun 2007 08:25:54 +0300
Date: 2007-06-09T08:25:54+03:00	[thread overview]
Message-ID: <466a398f$0$8390$39db0f71@news.song.fi> (raw)
In-Reply-To: <1181335115.659050.135860@q69g2000hsb.googlegroups.com>

mhamel_98@yahoo.com wrote:
> Hello c.l.a.  Another question, I have a program that stores data on
> the disk using sequential_io.  When I later read that data into an
> array, the memory growth after ingesting a file is much much larger
> than the disk footprint.  A file that takes 26.8MB on disk (over 134k
> records) causes the program to swell by over 600MB!  Holy bloatware.
> A short overview of what I'm trying to do - each sequential_io data
> file has an associated header file with stuff like number of records,
> etc.  The header is read, and an array is then created based on how
> many records are said to be in the data file.  The data file is then
> read, sticking a node into the array.  Some abbreviated code below,
> the spec:
> 
> generic
>   type Node_Type is private;
> package Node_Manager is
> 
>   package Seq is new Sequential_Io (Node_Type);
> 
>   type Node_Array is array (positive range <>) of Node_Type;
>   type Node_Ptr is access Node_Array;

Is the actual type for Node_Type a record type with variants? If so, is 
the size of the largest variant much larger than the size of the most 
common variants? I don't know about ObjectAda, but in GNAT the 
Node_Array would have a size that lets you store the largest variant in 
every array element, while the Node_Type objects stored in the 
sequential_io file probably use only as much file-space as the actual 
variant of each object requires.

The solution in GNAT would be to allocate storage for each Node_Type 
object separately and have an array of accesses:

    type Node_Ptr is access Node_Type;
    type Node_Array is array (positive range <>) of Node_Ptr;
    type Node_Array_Ptr is access Node_Array;

This increases memory overhead by allocating more blocks from the heap, 
but it may reduce the overall memory requirement if the largest variant 
of Node_Type is much larger than the average variant.

-- 
Niklas Holsti
Tidorum Ltd
niklas holsti tidorum fi
       .      @       .



  parent reply	other threads:[~2007-06-09  5:25 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-06-08 20:38 Memory Useage mhamel_98
2007-06-09  0:43 ` Adam Beneschan
2007-06-09  3:09   ` mhamel_98
2007-06-09  5:25 ` Niklas Holsti [this message]
2007-06-11 15:28   ` mhamel_98
replies disabled

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