comp.lang.ada
 help / color / mirror / Atom feed
From: "Warren W. Gay VE3WWG" <ve3wwg@cogeco.ca>
Subject: Re: Array and memory usage
Date: Tue, 11 Mar 2003 12:38:02 -0500
Date: 2003-03-11T12:38:02-05:00	[thread overview]
Message-ID: <3E6E1EFA.6030802@cogeco.ca> (raw)
In-Reply-To: wccfzpuajbg.fsf@shell01.TheWorld.com

Robert A Duff wrote:
> mheaney@on2.com (Matthew Heaney) writes:
>>Robert A Duff <bobduff@shell01.TheWorld.com> wrote in message news:<wccr89ge7hw.fsf@shell01.TheWorld.com>...
>>
>>>If you use this trick on Windows, it will allocate backing store for all
>>>that virtual memory.  I believe most Unix systems are smarter than that.
>>>
>>>This trick is sometimes more efficient than linked lists for growable
>>>data structures.  The links waste space, plus if you're not careful, the
>>>list gets scattered all over the place, damaging cache behavior.  The
>>>nice thing about arrays is that they are contiguous.
>>
>>One thing you can on Windows is simply reserve the virtual memory for
>>the array, without committing it to physical memory, and then use SEH
>>("structured exception handling") to handle the error.
>>
>>The SEH mechanism supports resumption semantics, so you can handle the
>>exception by committing the page you need, and then resuming from the
>>spot from where the exception was raised.
>>
>>This is documented in Jeff Richter's Programming Applications book.
> 
> I thought it happened automatically.  That is, if I say:
> 
>     X: array (1..100_000_000) of Integer;
> 
> it would allocate 400,000,000 bytes of virtual memory, but only allocate
> physical pages on demand.  I believe that much works on Windows (without
> calling windows-specific stuff like SEH).  (Windows 2000, Windows XP.)
> The problem I found was that it allocated 400,000,000 bytes of backing
> store, which was annoying.
> 
> Am I misinformed?
> 
> - Bob

Where it is defined also makes a difference. If you do:

procedure Foo is
    X: array (1..100_000_000) of Integer;
begin
    ...

then this will use the _stack_ (considerably at that). If your stack is too
small (or too small because it has been split up between many tasks),
this has no hope of succeeding without blowing up, or corrupting memory
beyond the stack (or end of) if the stack overflow goes undetected.

The pages are committed on the stack as they are used AFAIK, for most
platforms.

-- 
Warren W. Gay VE3WWG
http://home.cogeco.ca/~ve3wwg




  parent reply	other threads:[~2003-03-11 17:38 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-03-09 11:19 Array and memory usage Preben Randhol
2003-03-09 11:52 ` John R. Strohm
2003-03-09 12:11   ` Preben Randhol
2003-03-09 13:34     ` Marin David Condic
2003-03-09 15:05       ` Preben Randhol
2003-03-10  1:45       ` Mark Biggar
2003-03-10 11:57         ` Marin David Condic
2003-03-10 12:06           ` Jeffrey Creem
2003-03-09 17:49     ` Robert A Duff
2003-03-09 17:04 ` Jeffrey Creem
2003-03-09 17:09   ` Preben Randhol
2003-03-09 18:10 ` Robert A Duff
2003-03-10 15:13   ` Matthew Heaney
2003-03-10 23:33     ` Robert A Duff
2003-03-11  0:40       ` Randy Brukardt
2003-03-11 23:37         ` Robert A Duff
2003-03-12 19:18           ` Randy Brukardt
2003-03-11 16:01       ` Matthew Heaney
2003-03-11 17:38       ` Warren W. Gay VE3WWG [this message]
  -- strict thread matches above, loose matches on Subject: below --
2003-03-12 22:04 Alexandre E. Kopilovitch
2003-03-12 22:20 ` Larry Kilgallen
replies disabled

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