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
next prev 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