On Tue, 2007-04-03 at 21:51 -0400, John Anthony Kazos Jr. wrote: > > This is wrong. Although the scope is at _block_ level, all variables are > > allocated on the stack at _function_ level. So, when entering func() all > > variables within it, including x and y, are allocated. > > But this doesn't make sense. Why would the compiler not immediately > optimize both variables into the same allocation? It seems obvious to me > that the amount of space pushed onto the stack when the function is > entered should be the maximum space needed by any combination of local > variables in-scope at any time. GCC wouldn't be that stupid, would it? Sorry, the last message was sent before I finished. As I was saying, I agree, and it depends on the compiler optimization level: 00:21:13 framos@core2duo:~ $> more teste.c #include <stdio.h> int main() { { int x=5; printf("x=%d\n",x); printf("addr(x)=%p\n", &x); } { int y=10; printf("y=%d\n",y); printf("add(y)=%p\n", &y); } return 0; } 00:21:21 framos@core2duo:~ $> gcc -o teste teste.c 00:21:24 framos@core2duo:~ $> ./teste x=5 addr(x)=0xbffb2200 y=10 add(y)=0xbffb21fc If you use -O2 or -O3, yes, it works as we expect: 00:22:39 framos@core2duo:~ $> gcc -O2 -o teste teste.c 00:22:46 framos@core2duo:~ $> ./teste x=5 addr(x)=0xbfd9e7ec y=10 add(y)=0xbfd9e7ec Cheers! -- To unsubscribe from this list: send an email with "unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx Please read the FAQ at http://kernelnewbies.org/FAQ