delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1999/06/22/16:25:32

From: Martin Ambuhl <mambuhl AT earthlink DOT net>
Newsgroups: comp.os.msdos.djgpp
Subject: Re: Question: allocation
Date: Tue, 22 Jun 1999 14:48:36 -0400
References: <7km7cs$sc$1 AT nslave1 DOT tin DOT it>
X-Posted-Path-Was: not-for-mail
X-Accept-Language: en
X-ELN-Date: 22 Jun 1999 18:47:17 GMT
X-ELN-Insert-Date: Tue Jun 22 12:45:33 1999
Organization: Nocturnal Aviation
Lines: 51
Mime-Version: 1.0
NNTP-Posting-Host: 1cust85.tnt11.nyc3.da.uu.net
Message-ID: <376FDA84.548CC50C@earthlink.net>
X-Mailer: Mozilla 4.6 [en] (Win95; U)
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

Marco Fabiani wrote:
> 
> I've a little question:
> 
> i'f i declare:
> 
> int    a[10];
> int    b[10];
> 
> int    main()
> {
> int    c[10];
> int    d[10];
> 
>     /*    ecc.ecc.    */
>     return 0;
> }
> 
> where a, b, c, d goes?
> c and d should go on stack, that in Intel-based machines means c > d (c is
> allocated at an upper address than d), but a and b?? Does djgpp use a data
> segment for global variables (thus b > a) or system stack (thus a > b)?
> And, is it safe to assume that a and b are allocated consecutively in
> memory?

As soon as you start thinking in this kind of machine-specific way, you already
should hear warning bells go off.  Suppose you simply have

#define SEMISIZE 10

int a[2*SEMISIZE];

int main(void)
{
   int c[2*SEMISIZE], *b, *d;
   b = a + SEMISIZE;
   d = c + SEMISIZE;
   /* usw. */
   return 0;
}


There is a good chance that this sort of coding will get you where you want to
go.


-- 
Martin Ambuhl (mambuhl AT earthlink DOT net)

Ah! but it is something to have at least the 
choice of nightmares.  - Joseph Conrad

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019