comp.lang.ada
 help / color / mirror / Atom feed
From: Warren <ve3wwg@gmail.com>
Subject: Re: segfault with large-ish array with GNAT
Date: Thu, 18 Mar 2010 17:03:19 +0000 (UTC)
Date: 2010-03-18T17:03:19+00:00	[thread overview]
Message-ID: <Xns9D3F84CEB288DWarrensBlatherings@85.214.113.135> (raw)
In-Reply-To: ac4bed10-f655-4fa5-8891-2967ba4388a0@k6g2000prg.googlegroups.com

Jerry expounded in news:ac4bed10-f655-4fa5-8891-2967ba4388a0
@k6g2000prg.googlegroups.com:
..
> So here's me being naive: I would have thought that Ada (or GNAT
> specifically) would be smart enough to allocate memory for large
> objects such as my long array in a transparent way so that I don't
> have to worry about it, thus (in the Ada spirit) making it harder to
> screw up. 

Programmer's do still have some responsibility in
design, Ada or otherwise. ;-)

> But it seems that I will have to allocate memory for large objects
> using pointers (and thus take the memory from the heap). Is that
> right?
..
> Jerry

The stack is a valuable resource and sometimes you need to
be careful with allocation.  I forget how gnat implements
tasks (threads) precisely, but they too require a stack. So 
your virtual address space for stack must also be carved up 
for each additional task. A 2G address space seemed huge 20 
years ago, but it seems rather small these days.

With the new focus on parallel cores etc., I've often pondered 
what a future CPU without a stack might look like. Imagine 
a CPU that somehow in microcode was able to do a fast-malloc 
of a stack frame (as part of a call), linking the new 
frame back to the calling frame. Then you could eliminate
the need for a "linear virtual stack region" altogether. This 
would allow code to freely fork into many parallel 
threads without the issue of pre-allocating stack [address]
space to each new thread. When the called procedure executed
a "return", it would (in microcode) free the current stack
frame and return to the prior one.  The "call" allocate/free's
could be constrained to one general "stack heap".

[..back from the day-dream..]

Generally speaking, large objects are best allocated
from the heap. But don't forget to release them once
finished. Otherwise you'll only feed from that trough 
a few times also. ;-)

Warren



  parent reply	other threads:[~2010-03-18 17:03 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-03-17 19:21 segfault with large-ish array with GNAT Jerry
2010-03-17 19:36 ` Gautier write-only
2010-03-17 19:58   ` Georg Bauhaus
2010-03-18  6:45     ` Jerry
2010-03-18  7:52       ` Ludovic Brenta
2010-03-18 23:57         ` Robert A Duff
2010-03-18 10:13       ` Jeffrey Creem
2010-03-18 10:23         ` Ludovic Brenta
2010-03-19  0:44           ` Jerry
2010-03-18 19:51         ` Adam Beneschan
2010-03-18 14:44       ` John B. Matthews
2010-03-19  4:44         ` Jeffrey R. Carter
2010-03-19  8:14           ` John B. Matthews
2010-03-18 15:36       ` Gautier write-only
2010-03-18 16:46       ` tmoran
2010-03-18 19:11         ` Warren
2010-03-18 17:03       ` Warren [this message]
2010-03-18 20:38         ` Maciej Sobczak
2010-03-19 13:26           ` Charmed Snark
2010-03-19 17:27             ` tmoran
2010-03-19 18:02               ` Simon Wright
2010-03-19 20:10                 ` Warren
2010-03-19 21:50                 ` Adam Beneschan
2010-03-19 20:24               ` Warren
2010-03-19 20:38           ` Warren
2010-03-19  8:31         ` Ludovic Brenta
2010-03-19 13:20           ` Warren
2010-03-19 12:04       ` Brian Drummond
2010-03-19 19:22         ` Jerry
2010-03-19 20:22         ` Jeffrey R. Carter
2010-03-19 23:24           ` Jerry
2010-03-20  0:25             ` Jeffrey R. Carter
2010-05-07 21:58       ` Raising the stack limit (was: segfault with large-ish array with GNAT) Björn Persson
2010-03-17 19:57 ` segfault with large-ish array with GNAT jonathan
replies disabled

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