tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Rationale for some rules in style guide



> Which compiler from this century doesn't allocate stack space
> independent from the source order?

At a minimum, the one that shipped with 5.2.  According to --version,
it is

gcc (GCC) 4.1.3 20080704 prerelease (NetBSD nb3 20111107)

which is well within this century, and, on amd64, this program

	#include <stdio.h>
	
	int main(void);
	int main(void)
	{
	 volatile char beg;
	 volatile char a;
	 volatile int b;
	 volatile char c;
	 volatile char end;
	
	 a = 1;
	 b = 2;
	 c = 3;
	 printf("%d\n",(int)(&beg-&end));
	 return(0);
	}

prints 9, but if I move the "volatile int b" line up or down one line,
the output changes to 8 or 10.  (Yes, the I got the beg and end names
backwards.)  The volatiles and assignments are to keep the compiler
from optimizing unused variables out of existence - the first version,
which had neither, printed 1.  Compiling with -save-temps and looking
at the assembly, it's clear that the variable order on the stack is the
source-code order.

/~\ The ASCII				  Mouse
\ / Ribbon Campaign
 X  Against HTML		mouse%rodents-montreal.org@localhost
/ \ Email!	     7D C8 61 52 5D E7 2D 39  4E F1 31 3E E8 B3 27 4B


Home | Main Index | Thread Index | Old Index