delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2019/09/18/19:10:22

X-Recipient: archive-cygwin AT delorie DOT com
DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id
:list-unsubscribe:list-subscribe:list-archive:list-post
:list-help:sender:mime-version:references:in-reply-to:from:date
:message-id:subject:to:cc:content-type
:content-transfer-encoding; q=dns; s=default; b=QsRskK55nWtb28kp
NkokkUhKVq8KaKbK/Fx9ZrKtJ/Wwfay3LDJp7HZO5kdurFpVSH0YL0Um1AgdJXxj
ru3unupOWTUgOyN3LbwN4ADwtuA2ES0SdwdxiD4b301khzJZ9+LjH+0EjB6KN+fM
P192vwzmR+Dzr1zBGIssb9nJtFQ=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id
:list-unsubscribe:list-subscribe:list-archive:list-post
:list-help:sender:mime-version:references:in-reply-to:from:date
:message-id:subject:to:cc:content-type
:content-transfer-encoding; s=default; bh=Vs1VNvk63MSs21StZPygEj
YkgMs=; b=ATMtlO/7ynXo8CaNfqr+RQ99gA+fUt7hzyLu0KAWRbL4aesMghLJ4a
Wlxdb0LrZT2WP4jGrRA6/Jws1L9ieBI28URt2sdIaZNst9cVBPTOv+eX5QnIVoBM
EwJN1vz7E+SvtX4Ygmcb2WPxmXL6ATX8DnP7CNyytgQ2O/IEkfwi8=
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
Authentication-Results: sourceware.org; auth=none
X-Spam-SWARE-Status: No, score=-0.0 required=5.0 tests=ASBESTOS_BODY,AWL,BAYES_00,FREEMAIL_FROM,HTML_MESSAGE,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=no version=3.3.1 spammy=up, 20199, suit, foot
X-HELO: mail-wm1-f41.google.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=ijof0/wdoKGnCXtpSkXYkYojm2czojZK43pjgfDYjjU=; b=lPFB6VGZdkMbFSnd0LlgRhmlvB7v5+3eY74/FUp/U3icT5Qg8Pw5Qkhs45D0EgxOlf y59KDkTkBSj662jNYNiONUJIgZo7EU1FugZx/XVetgkGB3UjOAoxClNsxH1Xm6jgZvr4 krZoTTIAmdxoMhyqTrZ61O53GfAtShY/2dduvRbYISZ3QaiI3aQW4FE3RQvPvnuTON/N k8HKD5v6cGto6kpFF28W/5tQn88LIyvd/VffjpZFeESCwrZOskC197fA+txBWAetyKI5 a6HeZGfaAOBZ5jDzJTVNcMxlLUaXW/xcxJRr9IbOE5IAPrasbjGzLUJg3ud2L9p35eUi o+6Q==
MIME-Version: 1.0
References: <CY4PR1101MB21339312E8F5656D8C887BFE81B30 AT CY4PR1101MB2133 DOT namprd11 DOT prod DOT outlook DOT com> <87ftl0jb1i DOT fsf AT Rainer DOT invalid> <VI1PR01MB44132EB2432CCD4CE1892304DEB30 AT VI1PR01MB4413 DOT eurprd01 DOT prod DOT exchangelabs DOT com> <CAAr43iMBDJdYeybs0Lc3JZQyCDWGQuzU-MT-hVDDL0kg3LxFVg AT mail DOT gmail DOT com> <VI1P195MB0765C387C43BC4417FAFD8E3DE8E0 AT VI1P195MB0765 DOT EURP195 DOT PROD DOT OUTLOOK DOT COM>
In-Reply-To: <VI1P195MB0765C387C43BC4417FAFD8E3DE8E0@VI1P195MB0765.EURP195.PROD.OUTLOOK.COM>
From: Joel Rees <joel DOT rees AT gmail DOT com>
Date: Thu, 19 Sep 2019 08:09:06 +0900
Message-ID: <CAAr43iNSpL1G6cbjSAQD_2t-LLrC9SHj2N0D+Xb6Q_Hha9GvPQ@mail.gmail.com>
Subject: Re: My C arrays are too large
To: Jose Isaias Cabrera <jicman AT outlook DOT com>
Cc: cygwin AT cygwin DOT com
X-IsSubscribed: yes
X-MIME-Autoconverted: from quoted-printable to 8bit by delorie.com id x8IN9wfp028313

I guess I should unpack things a bit, and I may sound argumentative, but my
argument is not really with anyone on this list.

2019年9月19日(木) 5:35 Jose Isaias Cabrera <jicman AT outlook DOT com>:

>
> Joel Rees, on Wednesday, September 18, 2019 02:38 PM, wrote...
> >
> > 2019年9月14日(土) 3:50 Jose Isaias Cabrera, on
> >
> > >
> > > Achim Gratz, on Friday, September 13, 2019 02:39 PM, wrote...
> > > >
> > > > Blair, Charles E III writes:
> > > > > My apologies for failing to reply on-list.  I don't know how :(
> > > > >
> > > > > My machine is 64 bit, and I hope I installed the correct version of
> > > cygwin.
> > > > >
> > > > > This program:
>
> > > >
> > > > > #include<stdio.h>
> > > > > int main(){char *a[50][8192];
> > > > > return 0;}
> > > > >
>


/* programmatic example by Jose Isaias Cabrera
// reformatting and annotation by Joel Rees
*/

#include <stdio.h>


int main( void )
{
   char *a[50][8192];
   /* Note that variables declared here are default "auto" allocated. */

   return 0;
   /* Note that some optimization settings might
   // entirely optimize the allocation out in recent compilers,
   // or optimize main() to just return 0 to the calling environment,
   // completely removing the allocation.
   */
}

> > > > compiles with gcc  (no special options) but gives "Segmentation
> fault".
> > > >
> > > > You are creating an automatic variable that's larger than the default
> > > > stack.  You need to enlarge the stack, either during link time or
> later
> > > > e.g. via
> > > >
> > > > peflags -x0x800000 a.out
> > >
> > > This is great! Thanks.
> > >
> > > But, let's talk about this a bit... Shouldn't the compiler provide some
> > > warning,
>

It would be nice, yes.

> > and also, it should never blow up with a "Segmentation fault".
>

But we are discussing C, and, frankly, I'd prefer segementation faults to
some of the possibilities that have been discussed by the engineering teams
that work on C compilers.

Ada, yes, the compiler is supposed to (mostly) prevent you from writing
things that give segmentation faults. C, no. It's within the nature of the
language itself.

C is specifically designed to allow the programmer to shoot him/herself in
the foot, and with good reason.

Lately, some reasonable protection is provided, according to the
engineering teams' consideration of what is reasonable, and there is a lot
of argument about what level of protection is too much.

> > I
> > > believe there should be some type of Out Of Memory error, or something
> like
> > > it.  But now just blow up.  Anyone thinks like me?  Just my 102
> Dominican
> > > cents ($1 = $51 Dominican). :-)
> > >
> >
> > Well, the behavior of the compiler itself is better discussed on the
> > compiler's forums, although you may need your asbestos suit when you do
> so.
> >
> > That said, why do you want this variable to be automatic?
>

As Eliot says, it might have been more clear if I had said "auto".

Auto in C means local to the function in both visibility and duration,
which essentially translates to allocation that looks like it's on a stack.

> Why do you want
> > it allocated on the stack?
>

Now, a good introductory software engineering course will usually encourage
you to use local visibility and duration unless you have a good reason not
to. But the larger a variable is, the more likely there is to be a good
reason for declaring the variable to have different scope.

Buffers, for instance, should persist between calls (static duration), and
symbol tables should usually be visible to all functions that refer to them
(extern visibility).

All of that said, you are right to wonder at this behavior.

Modern compilers inherit a lot of anti-optimal best worst practices from
the days of sixteen-bit addresses.

One of those is combining the flow-of-control stack with the parameter
stack in an interleaved linked list of local allocations, enabling simple
stack-smash attacks.

Locating that overloaded stack in as small a corner of address space as
possible is another, and it results in trouble anytime you allocate large
things on the stack, with local visibility, local duration, thus, auto.
(This practice is more in the operating system scope than in the compiler
scope, but the libraries the compiler links in define the behavior and give
the error messages.)

Yeah, this is a favorite topic of mine, occupying a bit of space in my
programming and computing related blogs. Non-optimal, but it is what you
get:

Either don't allocate large variables and structures on the stack, or use
compiler or linker flags, or command line tools, to set the object to
allocate a large stack.

Or hope you get segment violations instead of silent errors.

Joel Rees

(Maybe I should blog this.)

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple


- Raw text -


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