From: "Warren W. Gay VE3WWG" <ve3wwg@NoSpam.cogeco.ca>
Subject: Re: Objects and the Stack?
Date: Sat, 18 Dec 2004 14:41:33 -0500
Date: 2004-12-18T14:41:33-05:00 [thread overview]
Message-ID: <PI%wd.637$Wt5.248352@read2.cgocable.net> (raw)
In-Reply-To: <32fv82F3l9al7U1@individual.net>
Nick Roberts wrote:
> Freejack wrote:
>> On Fri, 17 Dec 2004 00:28:23 +0000, Jeffrey Carter wrote:
>>> The fact that pointers are generally not needed in Ada except when
>>> creating things such as dynamic data structures has nothing to do
>>> with tagged types. If you create objects of a classwide type, they
>>> are put on the stack if you declare them there, and in a storage pool
>>> if you allocate them there.
...
> I suppose so, but I think I should tell you now that what you trying
> (above) cannot work. The assumption in Ada is that the space reserved
> within a stack frame for an object cannot be resized (even though the
> space used /within/ the space reserved for an object can). So the
> compiler must be able to allocate the maximum size of an object on the
> stack. Since what you are attempting could cause Stack to grow to any
> size without limit, the compiler cannot know what maximum to allocate.
> It won't work, and so you must use the heap (or more correctly, a
> 'storage pool').
>
> Ada has no equivalent of alloca() in C. It might be interesting to
> experiment with a compiler extension to provide this facility. Certain
> algorithms might benefit from it.
The difference between what alloca() gets you and what you
get in the declare block is a minor difference:
-- Pseudo Ada here (Ada-ised C code for alloca())
declare
My_String : String_Access := Alloca(String(1..8));
begin
...
Put_Line(My_String.all);
-- Real Ada here
declare
My_String : String(1..8);
begin
...
Put_Line(My_String);
Apart from getting a pointer from alloca(), I don't see any
advantage. Both forms allocate from the stack frame.
> declare
> Name: String := "";
> pragma Extensible_Object(Name);
> begin
> ...
> Name := Name & ':'; -- changes its size
> ...
>
> It's an idea.
This is taking the alloca() idea further than I think it
goes. I could be wrong here, but can you realloc() an
alloca() region? If so, that is something that Ada does
in fact lack (including a realloc() in general, which I
pine for when growing arrays).
Warren.
next prev parent reply other threads:[~2004-12-18 19:41 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-12-16 22:27 Objects and the Stack? Freejack
2004-12-16 23:13 ` Nick Roberts
2004-12-20 14:50 ` Marc A. Criley
2004-12-20 16:22 ` Marius Amado Alves
2004-12-20 18:31 ` Dmitry A. Kazakov
2004-12-17 0:28 ` Jeffrey Carter
2004-12-17 8:45 ` Freejack
2004-12-17 11:11 ` Martin Dowie
2004-12-17 11:46 ` Nick Roberts
2004-12-17 19:52 ` Freejack
2004-12-18 4:02 ` Nick Roberts
2004-12-27 4:34 ` Dave Thompson
2004-12-18 19:41 ` Warren W. Gay VE3WWG [this message]
2004-12-18 20:50 ` Freejack
2004-12-18 21:15 ` Dmitry A. Kazakov
2004-12-27 4:34 ` Dave Thompson
2004-12-18 0:12 ` Jeffrey Carter
2004-12-18 0:43 ` Jeffrey Carter
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox