comp.lang.ada
 help / color / mirror / Atom feed
From: "Jeffrey Creem" <jeff@thecreems.com>
Subject: Re: Array and memory usage
Date: Sun, 09 Mar 2003 17:04:36 GMT
Date: 2003-03-09T17:04:36+00:00	[thread overview]
Message-ID: <EuKaa.21763$eG2.3707@sccrnsc03> (raw)
In-Reply-To: slrnb6m8mg.15o.randhol+news@kiuk0152.chembio.ntnu.no


"Preben Randhol" <randhol+news@pvv.org> wrote in message
news:slrnb6m8mg.15o.randhol+news@kiuk0152.chembio.ntnu.no...
> I was a bit puzzeled to see that if I do:
>
>    type Str_Array_Type is array (1 .. 1000) of String (1 .. 800);
>
>    type User_Data is
>       record
>          Name     : Str_Array_Type;
>          Hostname : Str_Array_Type;
>       end record;
>
> my program uses 800 bytes of memory, while if I only change the program
> like this:
>
>    type User_Data is
>       record
>          Name     : Str_Array_Type := (others => (others => ' '));
>          Hostname : Str_Array_Type := (others => (others => ' '));
>       end record;
>
> then the program uses 2356 bytes.
>
> I thought all the memory needed for an array would be claimed when the
> program started no matter if the array was filled or not.
>
> Is this correct or am I just being tricked by the program that measures
> the memory used by my program?
>
> If it is correct then it doesn't matter if I define my array as (1 ..
> 100) or (1 .. 10_000) as long as I don't initialize the strings.
> I can just add to User_Data a:
>
>    type Used_Type is array (1 .. 1000) of Boolean;
>
>    Used : Used_Type := (others => False);


I believe what you are seeing is not something that will happen under all
OS's.

Linux uses a commit-on-us type memory manager. Even though you initialized
your data, it probably was done in such a way that the memory was intialized
within the ELF initialized data segment.

Under linux even something like

aa = malloc(A_BIG_NUMBER)

will not show all of the data as actually allocated until a process accesses
each page of memory..

What you are seeing is partially a trick and partially real. It is not a
direct effect of the language or compiler.

Whether or not you should write your programs to rely on it will depend on
many factors.

Certainly on an embedded OS like vxWorks, your memory would be allocated and
consumed immediately.





  parent reply	other threads:[~2003-03-09 17:04 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 [this message]
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
  -- 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