Google
  Web www.spinics.net

Re: kernel stack problem

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


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 the line "unsubscribe linux-newbie" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.linux-learn.org/faqs

[Site Home]     [Audio]     [Hams]     [Kernel Newbies]     [Memory]     [Security]     [Netfilter]     [Bugtraq]     [Photo]     [Yosemite Photos]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Linux Resources]     [Fedora Users]

  Powered by Linux