comp.lang.ada
 help / color / mirror / Atom feed
From: "Alex R. Mosteo" <amosteo@unizar.es>
Subject: Re: Interfacing to C: big structures
Date: Thu, 28 Feb 2008 12:30:26 +0100
Date: 2008-02-28T12:30:26+01:00	[thread overview]
Message-ID: <62nkanF24b2toU1@mid.individual.net> (raw)
In-Reply-To: <21af9a6a-d522-4ba5-9d67-68eace9cd1b1@n77g2000hse.googlegroups.com>

Adam Beneschan wrote:
> On Feb 26, 11:47 am, Simon Wright <simon.j.wri...@mac.com> wrote:
>> Adam Beneschan <a...@irvine.com> writes:
>>> I thought of something like this, but Maciej said something about
>>> wanting to avoid dynamic memory, and it seems that you're defining a
>>> type whose size isn't going to be known until runtime, and therefore
>>> if you declare an Ada variable of that type, it will have to be
>>> allocated dynamically in some way.
>> That was the cunning trick: the size is known at *elaboration* time!
> 
> Isn't that part of "runtime"?  I'm not sure I get your point.  In the
> typical compile/link/execute model, as I understand it, the function
> that returns the size isn't going to be "called" by the linker, and
> probably not by the loader when the program is executed; so the
> function will be called when the program starts executing, which means
> that any objects of that type can't be allocated until after execution
> starts, which means "dynamic allocation" more or less by definition.
> However, as others have pointed out, it's not clear exactly what kinds
> of dynamic allocation need to be avoided here, and which ones might be
> OK.

Actually I would have expected these types to be allocated in the stack.
I likened them to indefinite types, but certainly the maximum size of
some indefinite types may be known at compile time, so this set them
apart and I was simplifying too much. Besides, at least one
implementation, as Randy Brukardt said, uses the heap for them. Even if
it's the compiler doing the management, this may be a no-go in some real
time environments.

Using the heap may be easier for an implementation; another question is
if it is still doable in the stack. I wonder what gnat does. Is the
secondary gnat stack considered a kind of heap? Is this what gnat uses?
Are there pragma Restrictions that could clarify this? Just throwing
questions in the air.

I guess that if my proposal is deemed unacceptable, one can neither use
anymore things like

type T (Len : Natural) is record
   Name   : String (1 .. Len);
   Others : Whatever;
   -- ...
end record;

?



  parent reply	other threads:[~2008-02-28 11:30 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-02-25 21:17 Interfacing to C: big structures Maciej Sobczak
2008-02-25 23:26 ` Randy Brukardt
2008-02-25 23:26 ` Randy Brukardt
2008-02-27 13:23   ` Maciej Sobczak
2008-02-25 23:26 ` Randy Brukardt
2008-02-25 23:43 ` Robert A Duff
2008-02-26 13:53   ` Stephen Leake
2008-02-26 21:12     ` Randy Brukardt
2008-02-26  2:36 ` Steve
2008-02-26 12:00 ` Alex R. Mosteo
2008-02-26 14:05   ` Robert A Duff
2008-02-26 15:19     ` Alex R. Mosteo
2008-02-26 15:33       ` Robert A Duff
2008-02-26 16:21         ` Alex R. Mosteo
2008-02-27  1:28           ` Robert A Duff
2008-03-10  1:38             ` David Thompson
2008-02-26 17:35   ` Adam Beneschan
2008-02-26 19:47     ` Simon Wright
2008-02-26 21:14       ` Randy Brukardt
2008-02-27  1:40         ` Robert A Duff
2008-02-27 17:12       ` Adam Beneschan
2008-02-27 20:37         ` Simon Wright
2008-02-28 11:30         ` Alex R. Mosteo [this message]
2008-02-28 15:53           ` Robert A Duff
2008-02-29 10:45             ` Alex R. Mosteo
2008-02-27  1:37     ` Robert A Duff
2008-02-27 13:49       ` Maciej Sobczak
replies disabled

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